Merge "mediawiki.special.preferences: Use standard IIFE"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 18 Oct 2015 05:19:53 +0000 (05:19 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 18 Oct 2015 05:19:53 +0000 (05:19 +0000)
161 files changed:
RELEASE-NOTES-1.26
RELEASE-NOTES-1.27
autoload.php
docs/hooks.txt
includes/Category.php
includes/Collation.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Html.php
includes/HtmlFormatter.php
includes/Linker.php
includes/MediaWiki.php
includes/OutputPage.php
includes/Setup.php
includes/Title.php
includes/User.php
includes/api/ApiMessage.php
includes/api/ApiQueryORM.php [deleted file]
includes/api/ApiQuerySiteinfo.php
includes/api/ApiUpload.php
includes/api/i18n/ar.json
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/ksh.json
includes/api/i18n/pt-br.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sd.json [new file with mode: 0644]
includes/api/i18n/uk.json
includes/cache/MessageCache.php
includes/changes/ChangesList.php
includes/changes/EnhancedChangesList.php
includes/db/DatabasePostgres.php
includes/db/loadbalancer/LoadBalancer.php
includes/deferred/LinksDeletionUpdate.php
includes/diff/DairikiDiff.php
includes/exception/MWExceptionHandler.php
includes/installer/i18n/ar.json
includes/installer/i18n/nl.json
includes/installer/i18n/sd.json
includes/libs/IEUrlExtension.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/media/Bitmap.php
includes/media/FormatMetadata.php
includes/mime.info
includes/mime.types
includes/objectcache/ObjectCache.php
includes/page/WikiPage.php
includes/parser/ParserOutput.php
includes/resourceloader/ResourceLoaderEditToolbarModule.php
includes/revisiondelete/RevDelList.php
includes/specials/SpecialBlock.php
includes/specials/SpecialFileDuplicateSearch.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserrights.php
includes/upload/UploadBase.php
includes/upload/UploadStash.php
languages/classes/LanguageHy.php
languages/classes/LanguageWa.php
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/be-tarask.json
languages/i18n/bgn.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/cv.json
languages/i18n/de.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/gl.json
languages/i18n/gom-latn.json
languages/i18n/gsw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/ia.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/ksh.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lt.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mr.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/olo.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sa.json
languages/i18n/sd.json
languages/i18n/sh.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/th.json
languages/i18n/uk.json
languages/i18n/vi.json
languages/i18n/yi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/backupTextPass.inc
maintenance/language/zhtable/Makefile.py
maintenance/namespaceDupes.php
maintenance/storage/recompressTracked.php
maintenance/userOptions.inc
opensearch_desc.php
phpcs.xml
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.special/mediawiki.special.css
resources/src/mediawiki.widgets/mw.widgets.TitleSearchWidget.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.js
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/GlobalFunctions/wfGetCallerTest.php
tests/phpunit/includes/LinkFilterTest.php
tests/phpunit/includes/debug/MWDebugTest.php
tests/phpunit/includes/objectcache/BagOStuffTest.php
tests/phpunit/maintenance/DumpTestCase.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/maintenance/backup_PageTest.php

index efca318..53d9188 100644 (file)
@@ -94,6 +94,12 @@ production.
 * If search returns zero results and current search engine has a "did you mean"
   suggestion, results for suggestion will be shown. Can be disabled by setting
   $wgSearchRunSuggestedQuery to false.
+* Added several JavaScript libraries for uploading files to MediaWiki
+  from the client-side. See documentation for mw.Upload and its
+  subclasses for more information.
+* Added OOUI dialogs and layout for file upload interfaces. See
+  documentation for mw.Upload.Dialog, mw.Upload.BookletLayout and its
+  subclasses for more information.
 
 == External libraries ==
 === Upgraded external libraries ===
index 85151ee..835d38a 100644 (file)
@@ -16,7 +16,6 @@ production.
   1000 for the latter) are now hard-coded.
 * $wgDebugDumpSqlLength was removed (deprecated in 1.24).
 * $wgDebugDBTransactions was removed (deprecated in 1.20).
-* $wgRemoteUploadTarget (added in 1.26) removed, replaced by $wgForeignUploadTargets
 * $wgUseXVO has been removed, as it provides functionality only used by
   custom Wikimedia patches against Squid 2.x that probably noone uses in
   production anymore. There is now $wgUseKeyHeader that provides similar
@@ -60,12 +59,6 @@ production.
 * $wgCdnMaxageLagged was added, which limits the CDN cache TTL
   when any load balancer uses a DB that is lagged beyond the 'max lag'
   setting in the relevant section of $wgLBFactoryConf.
-* Added several JavaScript libraries for uploading files to MediaWiki
-  from the client-side. See documentation for mw.Upload and its
-  subclasses for more information.
-* Added OOUI dialogs and layout for file upload interfaces. See
-  documentation for mw.Upload.Dialog, mw.Upload.BookletLayout and its
-  subclasses for more information.
 * User::newSystemUser() may be used to simplify the creation of passwordless
   "system" users for logged actions from scripts and extensions.
 
@@ -83,6 +76,7 @@ production.
   "was-deleted" warning.
 
 === Action API internal changes in 1.27 ===
+* ApiQueryORM removed.
 
 === Languages updated in 1.27 ===
 
index 673072b..b35b683 100644 (file)
@@ -103,7 +103,6 @@ $wgAutoloadLocalClasses = array(
        'ApiQueryLangLinks' => __DIR__ . '/includes/api/ApiQueryLangLinks.php',
        'ApiQueryLinks' => __DIR__ . '/includes/api/ApiQueryLinks.php',
        'ApiQueryLogEvents' => __DIR__ . '/includes/api/ApiQueryLogEvents.php',
-       'ApiQueryORM' => __DIR__ . '/includes/api/ApiQueryORM.php',
        'ApiQueryPagePropNames' => __DIR__ . '/includes/api/ApiQueryPagePropNames.php',
        'ApiQueryPageProps' => __DIR__ . '/includes/api/ApiQueryPageProps.php',
        'ApiQueryPagesWithProp' => __DIR__ . '/includes/api/ApiQueryPagesWithProp.php',
index 0e76d58..8d36603 100644 (file)
@@ -575,6 +575,7 @@ $error: if the deletion was prohibited, the (raw HTML) error message to display
   (added in 1.13)
 $status: Status object, modify this to throw an error. Overridden by $error
   (added in 1.20)
+$suppress: Whether this is a suppression deletion or not (added in 1.27)
 
 'ArticleDeleteAfterSuccess': Output after an article has been deleted.
 $title: Title of the article that has been deleted.
index 3a21e25..1b05f33 100644 (file)
@@ -304,32 +304,16 @@ class Category {
                        return false;
                }
 
-               # Note, we must use names for this, since categorylinks does.
-               if ( $this->mName === null ) {
-                       if ( !$this->initialize() ) {
-                               return false;
-                       }
+               # If we have just a category name, find out whether there is an
+               # existing row. Or if we have just an ID, get the name, because
+               # that's what categorylinks uses.
+               if ( !$this->initialize() ) {
+                       return false;
                }
 
                $dbw = wfGetDB( DB_MASTER );
                $dbw->startAtomic( __METHOD__ );
 
-               # Insert the row if it doesn't exist yet (e.g., this is being run via
-               # update.php from a pre-1.16 schema).  TODO: This will cause lots and
-               # lots of gaps on some non-MySQL DBMSes if you run populateCategory.php
-               # repeatedly.  Plus it's an extra query that's unneeded almost all the
-               # time.  This should be rewritten somehow, probably.
-               $seqVal = $dbw->nextSequenceValue( 'category_cat_id_seq' );
-               $dbw->insert(
-                       'category',
-                       array(
-                               'cat_id' => $seqVal,
-                               'cat_title' => $this->mName
-                       ),
-                       __METHOD__,
-                       'IGNORE'
-               );
-
                $cond1 = $dbw->conditional( array( 'page_namespace' => NS_CATEGORY ), 1, 'NULL' );
                $cond2 = $dbw->conditional( array( 'page_namespace' => NS_FILE ), 1, 'NULL' );
                $result = $dbw->selectRow(
@@ -342,16 +326,40 @@ class Category {
                        __METHOD__,
                        array( 'LOCK IN SHARE MODE' )
                );
-               $ret = $dbw->update(
-                       'category',
-                       array(
-                               'cat_pages' => $result->pages,
-                               'cat_subcats' => $result->subcats,
-                               'cat_files' => $result->files
-                       ),
-                       array( 'cat_title' => $this->mName ),
-                       __METHOD__
-               );
+
+               if ( $this->mId ) {
+                       # The category row already exists, so do a plain UPDATE instead
+                       # of INSERT...ON DUPLICATE KEY UPDATE to avoid creating a gap
+                       # in the cat_id sequence. The row may or may not be "affected".
+                       $dbw->update(
+                               'category',
+                               array(
+                                       'cat_pages' => $result->pages,
+                                       'cat_subcats' => $result->subcats,
+                                       'cat_files' => $result->files
+                               ),
+                               array( 'cat_title' => $this->mName ),
+                               __METHOD__
+                       );
+               } else {
+                       $dbw->upsert(
+                               'category',
+                               array(
+                                       'cat_title' => $this->mName,
+                                       'cat_pages' => $result->pages,
+                                       'cat_subcats' => $result->subcats,
+                                       'cat_files' => $result->files
+                               ),
+                               array( 'cat_title' ),
+                               array(
+                                       'cat_pages' => $result->pages,
+                                       'cat_subcats' => $result->subcats,
+                                       'cat_files' => $result->files
+                               ),
+                               __METHOD__
+                       );
+               }
+
                $dbw->endAtomic( __METHOD__ );
 
                # Now we should update our local counts.
@@ -359,6 +367,6 @@ class Category {
                $this->mSubcats = $result->subcats;
                $this->mFiles = $result->files;
 
-               return $ret;
+               return true;
        }
 }
index c1f0b38..40e8627 100644 (file)
@@ -406,14 +406,15 @@ class IcuCollation extends Collation {
                        }
                }
 
-               // Sort the letters.
-               //
-               // It's impossible to have the precompiled data file properly sorted,
-               // because the sort order changes depending on ICU version. If the
-               // array is not properly sorted, the binary search will return random
-               // results.
-               //
-               // We also take this opportunity to remove primary collisions.
+               /* Sort the letters.
+                *
+                * It's impossible to have the precompiled data file properly sorted,
+                * because the sort order changes depending on ICU version. If the
+                * array is not properly sorted, the binary search will return random
+                * results.
+                *
+                * We also take this opportunity to remove primary collisions.
+                */
                $letterMap = array();
                foreach ( $letters as $letter ) {
                        $key = $this->getPrimarySortKey( $letter );
@@ -428,38 +429,40 @@ class IcuCollation extends Collation {
                        }
                }
                ksort( $letterMap, SORT_STRING );
-               // Remove duplicate prefixes. Basically if something has a sortkey
-               // which is a prefix of some other sortkey, then it is an
-               // expansion and probably should not be considered a section
-               // header.
-               //
-               // For example 'þ' is sometimes sorted as if it is the letters
-               // 'th'. Other times it is its own primary element. Another
-               // example is '₨'. Sometimes its a currency symbol. Sometimes it
-               // is an 'R' followed by an 's'.
-               //
-               // Additionally an expanded element should always sort directly
-               // after its first element due to they way sortkeys work.
-               //
-               // UCA sortkey elements are of variable length but no collation
-               // element should be a prefix of some other element, so I think
-               // this is safe. See:
-               // * https://ssl.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
-               // * http://site.icu-project.org/design/collation/uca-weight-allocation
-               //
-               // Additionally, there is something called primary compression to
-               // worry about. Basically, if you have two primary elements that
-               // are more than one byte and both start with the same byte then
-               // the first byte is dropped on the second primary. Additionally
-               // either \x03 or \xFF may be added to mean that the next primary
-               // does not start with the first byte of the first primary.
-               //
-               // This shouldn't matter much, as the first primary is not
-               // changed, and that is what we are comparing against.
-               //
-               // tl;dr: This makes some assumptions about how icu implements
-               // collations. It seems incredibly unlikely these assumptions
-               // will change, but nonetheless they are assumptions.
+
+               /* Remove duplicate prefixes. Basically if something has a sortkey
+                * which is a prefix of some other sortkey, then it is an
+                * expansion and probably should not be considered a section
+                * header.
+                *
+                * For example 'þ' is sometimes sorted as if it is the letters
+                * 'th'. Other times it is its own primary element. Another
+                * example is '₨'. Sometimes its a currency symbol. Sometimes it
+                * is an 'R' followed by an 's'.
+                *
+                * Additionally an expanded element should always sort directly
+                * after its first element due to they way sortkeys work.
+                *
+                * UCA sortkey elements are of variable length but no collation
+                * element should be a prefix of some other element, so I think
+                * this is safe. See:
+                * - https://ssl.icu-project.org/repos/icu/icuhtml/trunk/design/collation/ICU_collation_design.htm
+                * - http://site.icu-project.org/design/collation/uca-weight-allocation
+                *
+                * Additionally, there is something called primary compression to
+                * worry about. Basically, if you have two primary elements that
+                * are more than one byte and both start with the same byte then
+                * the first byte is dropped on the second primary. Additionally
+                * either \x03 or \xFF may be added to mean that the next primary
+                * does not start with the first byte of the first primary.
+                *
+                * This shouldn't matter much, as the first primary is not
+                * changed, and that is what we are comparing against.
+                *
+                * tl;dr: This makes some assumptions about how icu implements
+                * collations. It seems incredibly unlikely these assumptions
+                * will change, but nonetheless they are assumptions.
+                */
 
                $prev = false;
                $duplicatePrefixes = array();
index 9eff602..c21301f 100644 (file)
@@ -720,6 +720,14 @@ $wgCopyUploadAsyncTimeout = false;
  */
 $wgMaxUploadSize = 1024 * 1024 * 100; # 100MB
 
+/**
+ * Minimum upload chunk size, in bytes. When using chunked upload, non-final
+ * chunks smaller than this will be rejected. May be reduced based on the
+ * 'upload_max_filesize' or 'post_max_size' PHP settings.
+ * @since 1.26
+ */
+$wgMinUploadChunkSize = 1024; # 1KB
+
 /**
  * Point the upload navigation link to an external URL
  * Useful if you want to use a shared repository by default
@@ -5214,6 +5222,12 @@ $wgRateLimits = array(
                'ip' => null, // for each anon and recent account
                'subnet' => null, // ... within a /24 subnet in IPv4 or /64 in IPv6
        ),
+       'upload' => array(
+               'user' => null,
+               'newbie' => null,
+               'ip' => null,
+               'subnet' => null,
+       ),
        'move' => array(
                'user' => null,
                'newbie' => null,
index 23a7de4..8571cd7 100644 (file)
@@ -2188,6 +2188,8 @@ class EditPage {
                }
 
                # Use the title defined by DISPLAYTITLE magic word when present
+               # NOTE: getDisplayTitle() returns HTML while getPrefixedText() returns plain text.
+               #       setPageTitle() treats the input as wikitext, which should be safe in either case.
                $displayTitle = isset( $this->mParserOutput ) ? $this->mParserOutput->getDisplayTitle() : false;
                if ( $displayTitle === false ) {
                        $displayTitle = $contextTitle->getPrefixedText();
index 243df92..a3b1e55 100644 (file)
@@ -1985,8 +1985,11 @@ function wfGetAllCallers( $limit = 3 ) {
  * @return string
  */
 function wfFormatStackFrame( $frame ) {
-       return isset( $frame['class'] ) ?
-               $frame['class'] . '::' . $frame['function'] :
+       if ( !isset( $frame['function'] ) ) {
+               return 'NO_FUNCTION_GIVEN';
+       }
+       return isset( $frame['class'] ) && isset( $frame['type'] ) ?
+               $frame['class'] . $frame['type'] . $frame['function'] :
                $frame['function'];
 }
 
@@ -2856,16 +2859,17 @@ function wfShellExec( $cmd, &$retval = null, $environ = array(),
        $status = false;
        $logMsg = false;
 
-       // According to the documentation, it is possible for stream_select()
-       // to fail due to EINTR. I haven't managed to induce this in testing
-       // despite sending various signals. If it did happen, the error
-       // message would take the form:
-       //
-       // stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
-       //
-       // where [4] is the value of the macro EINTR and "Interrupted system
-       // call" is string which according to the Linux manual is "possibly"
-       // localised according to LC_MESSAGES.
+       /* According to the documentation, it is possible for stream_select()
+        * to fail due to EINTR. I haven't managed to induce this in testing
+        * despite sending various signals. If it did happen, the error
+        * message would take the form:
+        *
+        * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
+        *
+        * where [4] is the value of the macro EINTR and "Interrupted system
+        * call" is string which according to the Linux manual is "possibly"
+        * localised according to LC_MESSAGES.
+        */
        $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
        $eintrMessage = "stream_select(): unable to select [$eintr]";
 
@@ -3554,11 +3558,10 @@ function wfGetPrecompiledData( $name ) {
  * @return string
  */
 function wfMemcKey( /*...*/ ) {
-       global $wgCachePrefix;
-       $prefix = $wgCachePrefix === false ? wfWikiID() : $wgCachePrefix;
-       $args = func_get_args();
-       $key = $prefix . ':' . implode( ':', $args );
-       return strtr( $key, ' ', '_' );
+       return call_user_func_array(
+               array( ObjectCache::getMainClusterInstance(), 'makeKey' ),
+               func_get_args()
+       );
 }
 
 /**
@@ -3573,13 +3576,11 @@ function wfMemcKey( /*...*/ ) {
  */
 function wfForeignMemcKey( $db, $prefix /*...*/ ) {
        $args = array_slice( func_get_args(), 2 );
-       if ( $prefix ) {
-               // Match wfWikiID() logic
-               $key = "$db-$prefix:" . implode( ':', $args );
-       } else {
-               $key = $db . ':' . implode( ':', $args );
-       }
-       return strtr( $key, ' ', '_' );
+       $keyspace = $prefix ? "$db-$prefix" : $db;
+       return call_user_func_array(
+               array( ObjectCache::getMainClusterInstance(), 'makeKeyInternal' ),
+               array( $keyspace, $args )
+       );
 }
 
 /**
@@ -3594,9 +3595,10 @@ function wfForeignMemcKey( $db, $prefix /*...*/ ) {
  * @return string
  */
 function wfGlobalCacheKey( /*...*/ ) {
-       $args = func_get_args();
-       $key = 'global:' . implode( ':', $args );
-       return strtr( $key, ' ', '_' );
+       return call_user_func_array(
+               array( ObjectCache::getMainClusterInstance(), 'makeGlobalKey' ),
+               func_get_args()
+       );
 }
 
 /**
@@ -3737,16 +3739,16 @@ function wfScript( $script = 'index' ) {
  */
 function wfGetScriptUrl() {
        if ( isset( $_SERVER['SCRIPT_NAME'] ) ) {
-               #
-               # as it was called, minus the query string.
-               #
-               # Some sites use Apache rewrite rules to handle subdomains,
-               # and have PHP set up in a weird way that causes PHP_SELF
-               # to contain the rewritten URL instead of the one that the
-               # outside world sees.
-               #
-               # If in this mode, use SCRIPT_URL instead, which mod_rewrite
-               # provides containing the "before" URL.
+               /* as it was called, minus the query string.
+                *
+                * Some sites use Apache rewrite rules to handle subdomains,
+                * and have PHP set up in a weird way that causes PHP_SELF
+                * to contain the rewritten URL instead of the one that the
+                * outside world sees.
+                *
+                * If in this mode, use SCRIPT_URL instead, which mod_rewrite
+                * provides containing the "before" URL.
+                */
                return $_SERVER['SCRIPT_NAME'];
        } else {
                return $_SERVER['URL'];
@@ -3936,12 +3938,13 @@ function wfTransactionalTimeLimit() {
  * Converts shorthand byte notation to integer form
  *
  * @param string $string
+ * @param int $default Returned if $string is empty
  * @return int
  */
-function wfShorthandToInteger( $string = '' ) {
+function wfShorthandToInteger( $string = '', $default = -1 ) {
        $string = trim( $string );
        if ( $string === '' ) {
-               return -1;
+               return $default;
        }
        $last = $string[strlen( $string ) - 1];
        $val = intval( $string );
index c61dca8..b7958dd 100644 (file)
@@ -597,7 +597,6 @@ class Html {
                                // we may as well not call htmlspecialchars().
                                // @todo FIXME: Verify that we actually need to
                                // escape \n\r\t here, and explain why, exactly.
-                               #
                                // We could call Sanitizer::encodeAttribute() for this, but we
                                // don't because we're stubborn and like our marginal savings on
                                // byte size from not having to encode unnecessary quotes.
@@ -745,10 +744,10 @@ class Html {
        }
 
        /**
-        * Convenience function to produce a checkbox (input element with type=checkbox)
+        * Convenience function to produce a radio button (input element with type=radio)
         *
         * @param string $name Name attribute
-        * @param bool $checked Whether the checkbox is checked or not
+        * @param bool $checked Whether the radio button is checked or not
         * @param array $attribs Array of additional attributes
         * @return string Raw HTML
         */
index 83db268..2d81b28 100644 (file)
@@ -74,10 +74,8 @@ class HtmlFormatter {
                        }
 
                        // Workaround for bug that caused spaces before references
-                       // to disappear during processing:
-                       // https://phabricator.wikimedia.org/T55086
-                       //
-                       // Please replace with a better fix if one can be found.
+                       // to disappear during processing: https://phabricator.wikimedia.org/T55086
+                       // TODO: Please replace with a better fix if one can be found.
                        $html = str_replace( ' <', '&#32;<', $html );
 
                        libxml_use_internal_errors( true );
@@ -295,7 +293,6 @@ class HtmlFormatter {
                        $html = $this->fixLibXml( $html );
                        if ( wfIsWindows() ) {
                                // Cleanup for CRLF misprocessing of unknown origin on Windows.
-                               //
                                // If this error continues in the future, please track it down in the
                                // XML code paths if possible and fix there.
                                $html = str_replace( '&#13;', '', $html );
index 2e33bd1..e821004 100644 (file)
@@ -623,7 +623,6 @@ class Linker {
                        # Create a thumbnail. Alignment depends on the writing direction of
                        # the page content language (right-aligned for LTR languages,
                        # left-aligned for RTL languages)
-                       #
                        # If a thumbnail width has not been provided, it is set
                        # to the default user option as specified in Language*.php
                        if ( $fp['align'] == '' ) {
index aee6ee1..3399790 100644 (file)
@@ -203,10 +203,9 @@ class MediaWiki {
                        // curid and oldid request  parameters would allow page titles to be enumerated even
                        // when they are not guessable. So we reset the title to Special:Badtitle before the
                        // permissions error is displayed.
-                       //
+
                        // The skin mostly uses $this->context->getTitle() these days, but some extensions
                        // still use $wgTitle.
-
                        $badTitle = SpecialPage::getTitleFor( 'Badtitle' );
                        $this->context->setTitle( $badTitle );
                        $wgTitle = $badTitle;
@@ -628,7 +627,7 @@ class MediaWiki {
                                        // redirecting to HTTPS. It's likely such a request is going
                                        // to fail due to post data being lost, but let's try anyway
                                        // and just log the instance.
-                                       //
+
                                        // @todo FIXME: See if we could issue a 307 or 308 here, need
                                        // to see how clients (automated & browser) behave when we do
                                        wfDebugLog( 'RedirectedPosts', "Redirected from HTTP to HTTPS: $oldUrl" );
index 4f99f34..d29ec54 100644 (file)
@@ -3856,18 +3856,19 @@ class OutputPage extends ContextSource {
                                if ( $media == $targetMedia ) {
                                        $media = '';
                                } elseif ( preg_match( $screenMediaQueryRegex, $media ) === 1 ) {
-                                       // This regex will not attempt to understand a comma-separated media_query_list
-                                       //
-                                       // Example supported values for $media:
-                                       // 'screen', 'only screen', 'screen and (min-width: 982px)' ),
-                                       // Example NOT supported value for $media:
-                                       // '3d-glasses, screen, print and resolution > 90dpi'
-                                       //
-                                       // If it's a print request, we never want any kind of screen stylesheets
-                                       // If it's a handheld request (currently the only other choice with a switch),
-                                       // we don't want simple 'screen' but we might want screen queries that
-                                       // have a max-width or something, so we'll pass all others on and let the
-                                       // client do the query.
+                                       /* This regex will not attempt to understand a comma-separated media_query_list
+                                        *
+                                        * Example supported values for $media:
+                                        * 'screen', 'only screen', 'screen and (min-width: 982px)' ),
+                                        * Example NOT supported value for $media:
+                                        * '3d-glasses, screen, print and resolution > 90dpi'
+                                        *
+                                        * If it's a print request, we never want any kind of screen stylesheets
+                                        * If it's a handheld request (currently the only other choice with a switch),
+                                        * we don't want simple 'screen' but we might want screen queries that
+                                        * have a max-width or something, so we'll pass all others on and let the
+                                        * client do the query.
+                                        */
                                        if ( $targetMedia == 'print' || $media == 'screen' ) {
                                                return null;
                                        }
index 67c99c9..fbfef1f 100644 (file)
@@ -373,6 +373,15 @@ if ( $wgResourceLoaderMaxQueryLength === false ) {
        unset( $suhosinMaxValueLength );
 }
 
+// Ensure the minimum chunk size is less than PHP upload limits or the maximum
+// upload size.
+$wgMinUploadChunkSize = min(
+       $wgMinUploadChunkSize,
+       $wgMaxUploadSize,
+       wfShorthandToInteger( ini_get( 'upload_max_filesize' ), 1e100 ),
+       wfShorthandToInteger( ini_get( 'post_max_size' ), 1e100 ) - 1024 # Leave room for other parameters
+);
+
 /**
  * Definitions of the NS_ constants are in Defines.php
  * @private
index 8e5fae9..9ada4f3 100644 (file)
@@ -1008,10 +1008,8 @@ class Title {
         */
        public function getNsText() {
                if ( $this->isExternal() ) {
-                       // This probably shouldn't even happen. ohh man, oh yuck.
-                       // But for interwiki transclusion it sometimes does.
-                       // Shit. Shit shit shit.
-                       //
+                       // This probably shouldn't even happen,
+                       // but for interwiki transclusion it sometimes does.
                        // Use the canonical namespaces if possible to try to
                        // resolve a foreign namespace.
                        if ( MWNamespace::exists( $this->mNamespace ) ) {
@@ -1420,6 +1418,7 @@ class Title {
         * Deprecated for public use, use Title::makeTitle() with fragment parameter.
         * Still in active use privately.
         *
+        * @private
         * @param string $fragment Text
         */
        public function setFragment( $fragment ) {
index 5bf6f44..0dfdfc4 100644 (file)
@@ -5246,7 +5246,7 @@ class User implements IDBAccessObject {
 
                # Note that the pattern requirement will always be satisfied if the
                # input is empty, so we need required in all cases.
-               #
+
                # @todo FIXME: Bug 23769: This needs to not claim the password is required
                # if e-mail confirmation is being used.  Since HTML5 input validation
                # is b0rked anyway in some browsers, just return nothing.  When it's
index db826a6..370911a 100644 (file)
 
 /**
  * Interface for messages with machine-readable data for use by the API
+ *
+ * The idea is that it's a Message that has some extra data for the API to use when interpreting it
+ * as an error (or, in the future, as a warning). Internals of MediaWiki often use messages (or
+ * message keys, or Status objects containing messages) to pass information about errors to the user
+ * (see e.g. Title::getUserPermissionsErrors()) and the API has to make do with that.
+ *
  * @since 1.25
  * @ingroup API
  */
diff --git a/includes/api/ApiQueryORM.php b/includes/api/ApiQueryORM.php
deleted file mode 100644 (file)
index dc10c91..0000000
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/**
- * Base query module for querying results from ORMTables.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @since 1.21
- *
- * @file
- * @ingroup API
- *
- * @license GNU GPL v2+
- * @author Jeroen De Dauw < jeroendedauw@gmail.com >
- */
-abstract class ApiQueryORM extends ApiQueryBase {
-
-       /**
-        * Returns an instance of the IORMTable table being queried.
-        *
-        * @since 1.21
-        *
-        * @return IORMTable
-        */
-       abstract protected function getTable();
-
-       /**
-        * Returns the name of the individual rows.
-        * For example: page, user, contest, campaign, etc.
-        * This is used to appropriately name elements in XML.
-        * Deriving classes typically override this method.
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       protected function getRowName() {
-               return 'item';
-       }
-
-       /**
-        * Returns the name of the list of rows.
-        * For example: pages, users, contests, campaigns, etc.
-        * This is used to appropriately name nodes in the output.
-        * Deriving classes typically override this method.
-        *
-        * @since 1.21
-        *
-        * @return string
-        */
-       protected function getListName() {
-               return 'items';
-       }
-
-       /**
-        * Returns the path to where the items results should be added in the result.
-        *
-        * @since 1.21
-        *
-        * @return null|string|array
-        */
-       protected function getResultPath() {
-               return null;
-       }
-
-       /**
-        * Get the parameters, find out what the conditions for the query are,
-        * run it, and add the results.
-        *
-        * @since 1.21
-        */
-       public function execute() {
-               $params = $this->getParams();
-
-               if ( !in_array( 'id', $params['props'] ) ) {
-                       $params['props'][] = 'id';
-               }
-
-               $results = $this->getResults( $params, $this->getConditions( $params ) );
-               $this->addResults( $params, $results );
-       }
-
-       /**
-        * Get the request parameters and remove all params set
-        * to null (ie those that are not actually provided).
-        *
-        * @since 1.21
-        *
-        * @return array
-        */
-       protected function getParams() {
-               return array_filter(
-                       $this->extractRequestParams(),
-                       function ( $prop ) {
-                               return isset( $prop );
-                       }
-               );
-       }
-
-       /**
-        * Get the conditions for the query. These will be provided as
-        * regular parameters, together with limit, props, continue,
-        * and possibly others which we need to get rid off.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        *
-        * @return array
-        */
-       protected function getConditions( array $params ) {
-               $conditions = array();
-               $fields = $this->getTable()->getFields();
-
-               foreach ( $params as $name => $value ) {
-                       if ( array_key_exists( $name, $fields ) ) {
-                               $conditions[$name] = $value;
-                       }
-               }
-
-               return $conditions;
-       }
-
-       /**
-        * Get the actual results.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        * @param array $conditions
-        *
-        * @return ORMResult
-        */
-       protected function getResults( array $params, array $conditions ) {
-               return $this->getTable()->select(
-                       $params['props'],
-                       $conditions,
-                       array(
-                               'LIMIT' => $params['limit'] + 1,
-                               'ORDER BY' => $this->getTable()->getPrefixedField( 'id' ) . ' ASC',
-                       ),
-                       __METHOD__
-               );
-       }
-
-       /**
-        * Serialize the results and add them to the result object.
-        *
-        * @since 1.21
-        *
-        * @param array $params
-        * @param ORMResult $results
-        */
-       protected function addResults( array $params, ORMResult $results ) {
-               $serializedResults = array();
-               $count = 0;
-
-               foreach ( $results as /* IORMRow */ $result ) {
-                       if ( ++$count > $params['limit'] ) {
-                               // We've reached the one extra which shows that
-                               // there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'continue', $result->getId() );
-                               break;
-                       }
-
-                       $serializedResults[] = $this->formatRow( $result, $params );
-               }
-
-               $this->setIndexedTagNames( $serializedResults );
-               $this->addSerializedResults( $serializedResults );
-       }
-
-       /**
-        * Formats a row to it's desired output format.
-        *
-        * @since 1.21
-        *
-        * @param IORMRow $result
-        * @param array $params
-        *
-        * @return mixed
-        */
-       protected function formatRow( IORMRow $result, array $params ) {
-               return $result->toArray( $params['props'] );
-       }
-
-       /**
-        * Set the tag names for formats such as XML.
-        *
-        * @since 1.21
-        *
-        * @param array $serializedResults
-        */
-       protected function setIndexedTagNames( array &$serializedResults ) {
-               ApiResult::setIndexedTagName( $serializedResults, $this->getRowName() );
-       }
-
-       /**
-        * Add the serialized results to the result object.
-        *
-        * @since 1.21
-        *
-        * @param array $serializedResults
-        */
-       protected function addSerializedResults( array $serializedResults ) {
-               $this->getResult()->addValue(
-                       $this->getResultPath(),
-                       $this->getListName(),
-                       $serializedResults
-               );
-       }
-
-       /**
-        * @see ApiBase::getAllowedParams()
-        * @return array
-        */
-       public function getAllowedParams() {
-               $params = array(
-                       'props' => array(
-                               ApiBase::PARAM_TYPE => $this->getTable()->getFieldNames(),
-                               ApiBase::PARAM_ISMULTI => true,
-                               ApiBase::PARAM_REQUIRED => true,
-                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-props',
-                       ),
-                       'limit' => array(
-                               ApiBase::PARAM_DFLT => 20,
-                               ApiBase::PARAM_TYPE => 'limit',
-                               ApiBase::PARAM_MIN => 1,
-                               ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
-                               ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2,
-                               ApiBase::PARAM_HELP_MSG => 'api-orm-param-limit',
-                       ),
-                       'continue' => array(
-                               ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
-                       ),
-               );
-
-               return array_merge( $this->getTable()->getAPIParams(), $params );
-       }
-
-       /**
-        * @see ApiBase::getParamDescription()
-        * @deprecated since 1.25
-        * @return array
-        */
-       public function getParamDescription() {
-               $descriptions = array(
-                       'props' => 'Fields to query',
-                       'continue' => 'Offset number from where to continue the query',
-                       'limit' => 'Max amount of rows to return',
-               );
-
-               return array_merge( $this->getTable()->getFieldDescriptions(), $descriptions );
-       }
-}
index bcd5d9e..1265155 100644 (file)
@@ -246,6 +246,7 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                $data['misermode'] = (bool)$config->get( 'MiserMode' );
 
                $data['maxuploadsize'] = UploadBase::getMaxUploadSize();
+               $data['minuploadchunksize'] = (int)$this->getConfig()->get( 'MinUploadChunkSize' );
 
                $data['thumblimits'] = $config->get( 'ThumbLimits' );
                ApiResult::setArrayType( $data['thumblimits'], 'BCassoc' );
index b621cb0..320649f 100644 (file)
@@ -82,7 +82,7 @@ class ApiUpload extends ApiBase {
 
                // Check if the uploaded file is sane
                if ( $this->mParams['chunk'] ) {
-                       $maxSize = $this->mUpload->getMaxUploadSize();
+                       $maxSize = UploadBase::getMaxUploadSize();
                        if ( $this->mParams['filesize'] > $maxSize ) {
                                $this->dieUsage( 'The file you submitted was too large', 'file-too-large' );
                        }
@@ -139,6 +139,12 @@ class ApiUpload extends ApiBase {
                        return $this->getStashResult( $warnings );
                }
 
+               // Check throttle after we've handled warnings
+               if ( UploadBase::isThrottled( $this->getUser() )
+               ) {
+                       $this->dieUsageMsg( 'actionthrottledtext' );
+               }
+
                // This is the most common case -- a normal upload with no warnings
                // performUpload will return a formatted properly for the API with status
                return $this->performUpload( $warnings );
@@ -198,13 +204,30 @@ class ApiUpload extends ApiBase {
        private function getChunkResult( $warnings ) {
                $result = array();
 
-               $result['result'] = 'Continue';
                if ( $warnings && count( $warnings ) > 0 ) {
                        $result['warnings'] = $warnings;
                }
+
                $request = $this->getMain()->getRequest();
                $chunkPath = $request->getFileTempname( 'chunk' );
                $chunkSize = $request->getUpload( 'chunk' )->getSize();
+               $totalSoFar = $this->mParams['offset'] + $chunkSize;
+               $minChunkSize = $this->getConfig()->get( 'MinUploadChunkSize' );
+
+               // Sanity check sizing
+               if ( $totalSoFar > $this->mParams['filesize'] ) {
+                       $this->dieUsage(
+                               'Offset plus current chunk is greater than claimed file size', 'invalid-chunk'
+                       );
+               }
+
+               // Enforce minimum chunk size
+               if ( $totalSoFar != $this->mParams['filesize'] && $chunkSize < $minChunkSize ) {
+                       $this->dieUsage(
+                               "Minimum chunk size is $minChunkSize bytes for non-final chunks", 'chunk-too-small'
+                       );
+               }
+
                if ( $this->mParams['offset'] == 0 ) {
                        try {
                                $filekey = $this->performStash();
@@ -216,6 +239,18 @@ class ApiUpload extends ApiBase {
                        }
                } else {
                        $filekey = $this->mParams['filekey'];
+
+                       // Don't allow further uploads to an already-completed session
+                       $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
+                       if ( !$progress ) {
+                               // Probably can't get here, but check anyway just in case
+                               $this->dieUsage( 'No chunked upload session with this key', 'stashfailed' );
+                       } elseif ( $progress['result'] !== 'Continue' || $progress['stage'] !== 'uploading' ) {
+                               $this->dieUsage(
+                                       'Chunked upload is already completed, check status for details', 'stashfailed'
+                               );
+                       }
+
                        $status = $this->mUpload->addChunk(
                                $chunkPath, $chunkSize, $this->mParams['offset'] );
                        if ( !$status->isGood() ) {
@@ -224,18 +259,12 @@ class ApiUpload extends ApiBase {
                                );
 
                                $this->dieUsage( $status->getWikiText(), 'stashfailed', 0, $extradata );
-
-                               return array();
                        }
                }
 
                // Check we added the last chunk:
-               if ( $this->mParams['offset'] + $chunkSize == $this->mParams['filesize'] ) {
+               if ( $totalSoFar == $this->mParams['filesize'] ) {
                        if ( $this->mParams['async'] ) {
-                               $progress = UploadBase::getSessionStatus( $this->getUser(), $filekey );
-                               if ( $progress && $progress['result'] === 'Poll' ) {
-                                       $this->dieUsage( "Chunk assembly already in progress.", 'stashfailed' );
-                               }
                                UploadBase::setSessionStatus(
                                        $this->getUser(),
                                        $filekey,
@@ -255,21 +284,38 @@ class ApiUpload extends ApiBase {
                        } else {
                                $status = $this->mUpload->concatenateChunks();
                                if ( !$status->isGood() ) {
+                                       UploadBase::setSessionStatus(
+                                               $this->getUser(),
+                                               $filekey,
+                                               array( 'result' => 'Failure', 'stage' => 'assembling', 'status' => $status )
+                                       );
                                        $this->dieUsage( $status->getWikiText(), 'stashfailed' );
-
-                                       return array();
                                }
 
                                // The fully concatenated file has a new filekey. So remove
                                // the old filekey and fetch the new one.
+                               UploadBase::setSessionStatus( $this->getUser(), $filekey, false );
                                $this->mUpload->stash->removeFile( $filekey );
                                $filekey = $this->mUpload->getLocalFile()->getFileKey();
 
                                $result['result'] = 'Success';
                        }
+               } else {
+                       UploadBase::setSessionStatus(
+                               $this->getUser(),
+                               $filekey,
+                               array(
+                                       'result' => 'Continue',
+                                       'stage' => 'uploading',
+                                       'offset' => $totalSoFar,
+                                       'status' => Status::newGood(),
+                               )
+                       );
+                       $result['result'] = 'Continue';
+                       $result['offset'] = $totalSoFar;
                }
+
                $result['filekey'] = $filekey;
-               $result['offset'] = $this->mParams['offset'] + $chunkSize;
 
                return $result;
        }
@@ -379,6 +425,10 @@ class ApiUpload extends ApiBase {
                        // Chunk upload
                        $this->mUpload = new UploadFromChunks();
                        if ( isset( $this->mParams['filekey'] ) ) {
+                               if ( $this->mParams['offset'] === 0 ) {
+                                       $this->dieUsage( 'Cannot supply a filekey when offset is 0', 'badparams' );
+                               }
+
                                // handle new chunk
                                $this->mUpload->continueChunks(
                                        $this->mParams['filename'],
@@ -386,6 +436,10 @@ class ApiUpload extends ApiBase {
                                        $request->getUpload( 'chunk' )
                                );
                        } else {
+                               if ( $this->mParams['offset'] !== 0 ) {
+                                       $this->dieUsage( 'Must supply a filekey when offset is non-zero', 'badparams' );
+                               }
+
                                // handle first chunk
                                $this->mUpload->initialize(
                                        $this->mParams['filename'],
@@ -787,8 +841,15 @@ class ApiUpload extends ApiBase {
                        ),
                        'stash' => false,
 
-                       'filesize' => null,
-                       'offset' => null,
+                       'filesize' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_MIN => 0,
+                               ApiBase::PARAM_MAX => UploadBase::getMaxUploadSize(),
+                       ),
+                       'offset' => array(
+                               ApiBase::PARAM_TYPE => 'integer',
+                               ApiBase::PARAM_MIN => 0,
+                       ),
                        'chunk' => array(
                                ApiBase::PARAM_TYPE => 'upload',
                        ),
index 7bdf29a..278dc6f 100644 (file)
@@ -8,6 +8,7 @@
                        "Hiba Alshawi"
                ]
        },
+       "apihelp-main-param-action": "أي فعل للعمل.",
        "apihelp-main-param-format": "صيغة الخرج.",
        "apihelp-block-description": "منع مستخدم.",
        "apihelp-block-param-reason": "السبب للمنع.",
        "apihelp-delete-description": "حذف صفحة.",
        "apihelp-delete-param-unwatch": "أزل الصفحة من قائمة مراقبتك.",
        "apihelp-edit-description": "إنشاء وتعديل الصفحات.",
+       "apihelp-edit-param-text": "محتوى الصفحة",
+       "apihelp-edit-param-notminor": "تعديل غير طفيف.",
+       "apihelp-edit-param-bot": "علم على هذا التعديل كبوت.",
        "apihelp-edit-param-watch": "أضف الصفحة إلى لائحة مراقبة المستعمل الحالي",
+       "apihelp-edit-example-edit": "عدل صفحة.",
        "apihelp-emailuser-description": "مراسلة المستخدم",
+       "apihelp-feedrecentchanges-param-tagfilter": "فلتر بالوسم.",
+       "apihelp-filerevert-param-comment": "تعليق الرفع.",
+       "apihelp-help-example-recursive": "كل المساعدة في صفحة واحدة.",
+       "apihelp-import-param-summary": "تعليق الاستيراد.",
+       "apihelp-login-param-name": "اسم المستخدم.",
+       "apihelp-login-param-password": "كلمة السر",
+       "apihelp-login-example-login": "تسجيل الدخول",
+       "apihelp-move-param-reason": "السبب لإعادة التسمية.",
+       "apihelp-move-param-ignorewarnings": "تجاهل أي تحذيرات.",
+       "apihelp-opensearch-param-namespace": "النطاقات للبحث.",
        "apihelp-patrol-example-rcid": "ابحث عن تغيير جديد",
+       "apihelp-patrol-example-revid": "راجع مراجعة.",
+       "apihelp-protect-description": "غير مستوى الحماية لصفحة.",
+       "apihelp-protect-example-protect": "حماية صفحة.",
+       "apihelp-query+allpages-param-filterredir": "أي الصفحات للعرض.",
+       "apihelp-query+allrevisions-description": "اعرض كل المراجعات.",
        "apihelp-query+imageinfo-paramvalue-prop-userid": "إضافة هوية المستخدم الذي قام بتحميل كل إصدار ملف.",
        "apihelp-query+prefixsearch-param-offset": "عدد النتائج المراد تخطيها."
 }
index 8a5ee52..1c3a1de 100644 (file)
@@ -21,7 +21,7 @@
        "apihelp-main-param-servedby": "Zahrnout do odpovědi název hostitele, který požadavek obsloužil.",
        "apihelp-main-param-curtimestamp": "Zahrnout do odpovědi aktuální časové razítko.",
        "apihelp-main-param-origin": "Pokud k API přistupujete pomocí mezidoménového AJAXového požadavku (CORS), nastavte tento parametr na doménu původu. Musí být součástí všech předběžných požadavků, takže musí být součástí URI požadavku (nikoli těla POSTu). Hodnota musí přesně odpovídat jednomu z původů v hlavičce <code>Origin</code>, takže musí být nastavena na něco jako <kbd>https://en.wikipedia.org</kbd> nebo <kbd>https://meta.wikimedia.org</kbd>. Pokud parametr neodpovídá hlavičce <code>Origin</code>, bude vrácena odpověď 403. Pokud parametr odpovídá hlavičce <code>Origin</code> a tento původ je na bílé listině, bude nastavena hlavička <code>Access-Control-Allow-Origin</code>.",
-       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Seznam kódů lze načíst z <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd>, nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
+       "apihelp-main-param-uselang": "Jazyk, který se má použít pro překlad hlášení. Pomocí <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> se <kbd>siprop=languages</kbd> získáte seznam jazykových kódů nebo zadejte „<kbd>user</kbd>“ pro použití předvoleného jazyka aktuálního uživatele či „<kbd>content</kbd>“ pro použití jazyka obsahu této wiki.",
        "apihelp-block-description": "Zablokovat uživatele.",
        "apihelp-block-param-user": "Uživatelské jméno, IP adresa nebo rozsah IP adres, které chcete zablokovat.",
        "apihelp-block-param-reason": "Důvod bloku.",
        "apihelp-unblock-param-user": "Uživatel, IP adresa nebo záběr IP adres k odblokování. Nelze použít dohromady s <var>$1id</var>.",
        "apihelp-watch-example-watch": "Sledovat stránku <kbd>Main Page</kbd>.",
        "apihelp-watch-example-generator": "Zobrazit prvních několik stránek z hlavního jmenného prostoru.",
-       "apihelp-format-example-generic": "Výsledek dotazu vypsat ve formátu $1.",
+       "apihelp-format-example-generic": "Výsledek dotazu vrátit ve formátu $1.",
        "apihelp-dbg-description": "Vypisuje data ve formátu funkce <code>var_export()</code> z PHP.",
        "apihelp-dbgfm-description": "Vypisuje data ve formátu funkce <code>var_export()</code> z PHP (v čitelné HTML podobě).",
        "apihelp-json-description": "Vypisuje data ve formátu JSON.",
        "apihelp-none-description": "Nevypisuje nic.",
        "apihelp-php-description": "Vypisuje data v serializačním formátu PHP.",
        "apihelp-phpfm-description": "Vypisuje data v serializačním formátu PHP (v čitelné HTML podobě).",
-       "apihelp-rawfm-description": "Vypisuje data s ladicími prvky ve formátu JSON (v čitelné HTML podobě).",
+       "apihelp-rawfm-description": "Data včetně ladicích prvků vypisuje ve formátu JSON (v čitelné HTML podobě).",
        "apihelp-txt-description": "Vypisuje data ve formátu funkce <code>print_r()</code> z PHP.",
        "apihelp-txtfm-description": "Vypisuje data ve formátu funkce <code>print_r()</code> z PHP (v čitelné HTML podobě).",
        "apihelp-xml-description": "Vypisuje data ve formátu XML.",
        "apihelp-yaml-description": "Vypisuje data ve formátu YAML.",
        "apihelp-yamlfm-description": "Vypisuje data ve formátu YAML (v čitelné HTML podobě).",
        "api-format-title": "Odpověď z MediaWiki API",
-       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API:Main page|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
        "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
        "api-help-title": "Nápověda k MediaWiki API",
        "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
        "api-help-datatypes": "Některé typy parametrů v API potřebují bližší vysvětlení:\n;boolean\n:Booleovské parametry fungují jako zaškrtávací políčka v HTML: pokud je parametr uveden, bez ohledu na hodnotu, je považován za pravdivý. Pro nepravdivou hodnotu parametr zcela vynechte.\n;časová značka\n:Časové značky lze uvádět v několika formátech. Doporučuje se datum a čas podle ISO 8601. Všechny časy jsou v UTC a obsažené časové pásmo je ignorováno.\n:* Datum a čas podle ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (interpunkce a <kbd>Z</kbd> jsou nepovinné)\n:* Datum a čas podle ISO 8601 s (ignorovaným) zlomkem sekundy, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (pomlčky, dvojtečky a <kbd>Z</kbd> jsou nepovinné)\n:* Formát MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Obecný číselný formát, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (nepovinné časové pásmo <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> nebo <kbd>-<var>##</var></kbd> se ignoruje)\n:* Formát EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 2822 (časové pásmo lze vynechat), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle RFC 850 (časové pásmo lze vynechat), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formát podle céčkové funkce ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Sekundy od 1970-01-01T00:00:00Z jako celé číslo o 1–13 číslicích (s výjimkou <kbd>0</kbd>)\n:* Řetězec <kbd>now</kbd>",
        "api-help-param-type-integer": "Typ: {{PLURAL:$1|1=celé číslo|2=seznam celých čísel}}",
        "api-help-param-type-boolean": "Typ: boolean ([[Special:ApiHelp/main#main/datatypes|podrobnosti]])",
-       "api-help-param-list": "{{PLURAL:$1|1=Jedna hodnota|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
+       "api-help-param-list": "{{PLURAL:$1|1=Jedna z následujících hodnot|2=Hodnoty (oddělené <kbd>{{!}}</kbd>)}}: $2",
        "api-help-param-list-can-be-empty": "{{PLURAL:$1|0=Musí být prázdné|Může být prázdné nebo $2}}",
        "api-help-param-limit": "Není dovoleno více než $1.",
        "api-help-param-limit2": "Není dovoleno více než $1 ($2 pro boty).",
index f254f1b..2dce6a4 100644 (file)
        "apihelp-none-description": "Nichts ausgeben.",
        "apihelp-php-description": "Daten im serialisierten PHP-Format ausgeben.",
        "apihelp-phpfm-description": "Daten im serialisierten PHP-Format ausgeben (schöngedruckt in HTML).",
-       "apihelp-rawfm-description": "Daten mit den Fehlerbehebungselementen im JSON-Format ausgeben (schöngedruckt in HTML).",
+       "apihelp-rawfm-description": "Daten, einschließlich Fehlerbehebungselementen, im JSON-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-txt-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben.",
        "apihelp-txtfm-description": "Daten im PHP-<code>print_r()</code>-Format ausgeben (schöngedruckt in HTML).",
        "apihelp-xml-description": "Daten im XML-Format ausgeben.",
        "apihelp-yamlfm-description": "Daten im YAML-Format ausgeben (schöngedruckt in HTML).",
        "api-format-title": "MediaWiki-API-Ergebnis",
        "api-format-prettyprint-header": "Dies ist die HTML-Repräsentation des $1-Formats. HTML ist zur Fehlerbehebung gut, aber unpassend für den Anwendungsgebrauch.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Um die Nicht-HTML-Repräsentation des $1-Formats anzusehen, lege <kbd>format=$2</kbd> fest.\n\nSiehe die [[mw:API|vollständige Dokumentation]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
-       "api-orm-param-props": "Felder an die Anfrage.",
-       "api-orm-param-limit": "Maximale Anzahl zurückgegebender Zeilen.",
        "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
        "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
        "api-pageset-param-revids": "Eine Liste der Versionskennungen, an denen gearbeitet werden soll.",
index 90d7fa7..b53289a 100644 (file)
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Returns user groups and the associated permissions.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "Returns libraries installed on the wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "Returns extensions installed on the wiki.",
-       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions allowed to be uploaded.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Returns list of file extensions (file types) allowed to be uploaded.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Returns wiki rights (license) information if available.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Returns information on available restriction (protection) types.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).",
        "apihelp-php-description": "Output data in serialized PHP format.",
        "apihelp-php-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
        "apihelp-phpfm-description": "Output data in serialized PHP format (pretty-print in HTML).",
-       "apihelp-rawfm-description": "Output data with the debugging elements in JSON format (pretty-print in HTML).",
+       "apihelp-rawfm-description": "Output data, including debugging elements, in JSON format (pretty-print in HTML).",
        "apihelp-txt-description": "Output data in PHP's <code>print_r()</code> format.",
        "apihelp-txtfm-description": "Output data in PHP's <code>print_r()</code> format (pretty-print in HTML).",
        "apihelp-xml-description": "Output data in XML format.",
        "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
        "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
 
-       "api-orm-param-props": "Fields to query.",
-       "api-orm-param-limit": "Max amount of rows to return.",
-
        "api-pageset-param-titles": "A list of titles to work on.",
        "api-pageset-param-pageids": "A list of page IDs to work on.",
        "api-pageset-param-revids": "A list of revision IDs to work on.",
index 92efbfe..2614c32 100644 (file)
        "api-format-title": "Résultat de l’API de MediaWiki",
        "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de déboguage, et n’est pas approprié à une utilisation applicative.\n\nVoir la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
-       "api-orm-param-props": "Champs à rechercher.",
-       "api-orm-param-limit": "Nombre maximal de lignes à renvoyer.",
        "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
        "api-pageset-param-pageids": "Une liste des IDs de page sur lesquelles travailler.",
        "api-pageset-param-revids": "Une liste des IDs de révision sur lesquelles travailler.",
index 96ab8ca..f859a7b 100644 (file)
        "api-format-title": "Resultado de API de MediaWiki",
        "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
        "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
-       "api-orm-param-props": "Campos a consultar.",
-       "api-orm-param-limit": "Número máximo de filas a mostrar.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
        "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
        "api-pageset-param-revids": "Unha lista de IDs de modificacións sobre as que traballar.",
index d0ff9f5..c820278 100644 (file)
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "החזרת קבוצות משתמשים וההרשאות המשויכות.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "החזרת הספריות המותקנות בוויקי.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "החזרת ההרחבות המותקנות בוויקי.",
-       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים שאפשר להעלות.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "החזרת רשימת סיומות קבצים (סוגי קבצים) שאפשר להעלות.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "החזרת הזכויות (הרישיון) של הוויקי, אם זמין.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "החזרת מידע על ההגבלות (ההגנות) הזמינות.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "החזרת השפות שמדיה־ויקי תומכת בהן (זה יכול להיות מותאם מקומים עם <var>$1inlanguagecode</var>).",
        "apihelp-php-description": "לפלוט נתונים בתסדיר PHP מוסדר.",
        "apihelp-php-param-formatversion": "תסדיר הפלט:\n;1:תסדיר עם תאימות אחורה (ערכים בוליאניים בסגנון XML, מפתחות <samp>*</samp> לצומתי תוכן, וכו').\n;2:תסדיר מודרני ניסיוני. הפרטים יכולים להשתנות!\n;latest:להשתמש בתסדיר החדש ביותר (כרגע <kbd>2</kbd>), יכול להשתנות ללא התראה.",
        "apihelp-phpfm-description": "לפלוט נתונים בתסדיר PHP מוסדר (עם הדפסה יפה ב־HTML).",
-       "apihelp-rawfm-description": "לפלוט את הנתונים עם אלמנטים לניפוי שגיאות בתסדיר JSON (עם הדפסה יפה ב־HTML).",
+       "apihelp-rawfm-description": "לפלוט את הנתונים, כולל אלמנטים לניפוי שגיאות, בתסדיר JSON (עם הדפסה יפה ב־HTML).",
        "apihelp-txt-description": "לפלוט נתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP.",
        "apihelp-txtfm-description": "לפלוט את הנתונים בתסדיר <code dir=\"ltr\">print_r()</code> של PHP (עם הדפסה יפה ב־HTML).",
        "apihelp-xml-description": "לפלוט נתונים בתסדיר XML.",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
        "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
        "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
-       "api-orm-param-props": "באילו שדות לעשות שאילתה.",
-       "api-orm-param-limit": "מספר מרבי של שורות להחזיר.",
        "api-pageset-param-titles": "רשימת כותרות.",
        "api-pageset-param-pageids": "רשימת מזהי דף לעבוד עליהם.",
        "api-pageset-param-revids": "רשימת מזהי גרסה לעבוד עליהם.",
index 5f9850b..0230ae0 100644 (file)
@@ -11,6 +11,7 @@
                        "Macofe"
                ]
        },
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n</div>\n<strong>状態:</strong> このページに表示されている機能は全て動作するはずですが、この API は未だ活発に開発されており、変更される可能性があります。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に贈られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:API:Errors_and_warnings|API: Errors and warnings]] を参照してください。",
        "apihelp-main-param-action": "実行する操作です。",
        "apihelp-main-param-format": "出力する形式です。",
        "apihelp-main-param-smaxage": "<code>s-maxage</code> HTTP キャッシュ コントロール ヘッダー に、この秒数を設定します。エラーがキャッシュされることはありません。",
@@ -29,6 +30,7 @@
        "apihelp-block-param-autoblock": "その利用者が最後に使用したIPアドレスと、ブロック後に編集を試みた際のIPアドレスを自動的にブロックします。",
        "apihelp-block-param-noemail": "Wikiを通して電子メールを送信することを禁止します。(<code>blockemail</code> 権限が必要です)",
        "apihelp-block-param-hidename": "ブロック記録から利用者名を秘匿します。(<code>hideuser</code> 権限が必要です)",
+       "apihelp-block-param-allowusertalk": "自身のトークページの編集を許可する (<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> に依存)。",
        "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。",
        "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
        "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
@@ -37,6 +39,7 @@
        "apihelp-checktoken-param-type": "調べるトークンの種類。",
        "apihelp-checktoken-param-token": "調べるトークン。",
        "apihelp-checktoken-example-simple": "<kbd>csrf</kbd> トークンの妥当性を調べる。",
+       "apihelp-clearhasmsg-description": "現在の利用者の <code>hasmsg</code> フラグを消去します。",
        "apihelp-compare-description": "2つの版間の差分を取得します。\n\n\"from\" と \"to\" の両方の版番号、ページ名、もしくはページIDを渡す必要があります。",
        "apihelp-compare-param-fromtitle": "比較する1つ目のページ名。",
        "apihelp-compare-param-fromid": "比較する1つ目のページID。",
        "apihelp-createaccount-param-token": "最初のリクエストで得られたアカウント作成用トークンです。",
        "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
        "apihelp-createaccount-param-realname": "利用者の本名 (省略可能)。",
-       "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、ランダムなパスワードがその利用者に電子メールで送られます。",
+       "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、無作為なパスワードがその利用者に電子メールで送られます。",
        "apihelp-createaccount-param-reason": "ログに記録されるアカウント作成の理由 (任意)。",
+       "apihelp-createaccount-param-language": "利用者の言語コードの既定値 (省略可能, 既定ではコンテンツ言語)。",
        "apihelp-createaccount-example-pass": "利用者 <kbd>testuser</kbd> をパスワード <kbd>test123</kbd> として作成する。",
-       "apihelp-createaccount-example-mail": "利用者 <kbd>testmailuser</kbd>を作成し、ランダムに生成されたパスワードをメールで送る",
+       "apihelp-createaccount-example-mail": "利用者 <kbd>testmailuser</kbd>を作成し、無作為に生成されたパスワードをメールで送る。",
        "apihelp-delete-description": "ページを削除します。",
        "apihelp-delete-param-title": "削除するページ名です。<var>$1pageid</var> とは同時に使用できません。",
        "apihelp-delete-param-pageid": "削除するページIDです。<var>$1title</var> とは同時に使用できません。",
        "apihelp-query+allcategories-example-size": "カテゴリを、内包するページ数の情報と共に、一覧表示する。",
        "apihelp-query+allcategories-example-generator": "<kbd>List</kbd> で始まるカテゴリページに関する情報を取得する。",
        "apihelp-query+alldeletedrevisions-description": "利用者によって削除された、または名前空間内の削除されたすべての版を一覧表示する。",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "<var>$3user</var> と同時に使用します。",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var> と同時に使用できません。",
        "apihelp-query+alldeletedrevisions-param-start": "列挙の始点となるタイムスタンプ。",
        "apihelp-query+alldeletedrevisions-param-end": "列挙の終点となるタイムスタンプ。",
        "apihelp-query+querypage-param-limit": "返す結果の数。",
        "apihelp-query+querypage-example-ancientpages": "[[Special:Ancientpages]] の結果を返す。",
        "apihelp-query+random-param-namespace": "この名前空間にあるページのみを返します。",
+       "apihelp-query+random-param-limit": "返す無作為なページの数を制限する。",
        "apihelp-query+random-param-redirect": "代わりに <kbd>$1filterredir=redirects</kbd> を使用してください。",
        "apihelp-query+random-param-filterredir": "転送ページを絞り込む方法。",
        "apihelp-query+random-example-simple": "標準名前空間から2つのページを無作為に返す。",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "その版の利用者による、構文解析されたコメント。",
        "apihelp-query+revisions+base-paramvalue-prop-content": "その版のテキスト。",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "その版のタグ。",
+       "apihelp-query+revisions+base-param-limit": "返す版の数を制限する。",
        "apihelp-query+search-description": "全文検索を行います。",
        "apihelp-query+search-param-search": "この値を含むページ名または本文を検索します。Wikiの検索バックエンド実装に応じて、あなたは特別な検索機能を呼び出すための文字列を検索することができます。",
        "apihelp-query+search-param-namespace": "この名前空間内のみを検索します。",
index b39de68..ccd0dc3 100644 (file)
@@ -9,7 +9,8 @@
                        "Alex00728",
                        "Hwangjy9",
                        "Kurousagi",
-                       "Revi"
+                       "Revi",
+                       "Yearning"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 공지 사항] * [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청] </div>\n<strong>상태:</strong> 이 페이지에 표시된 모든 기능은 정상 작동할 것이지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 바뀔 수 있습니다. 업데이트 정보를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 HTTP 헤더에서 \"MediaWiki-API-Error\" 키를 보내고, 헤더 값과 오류 코드가 같게 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors_and_warnings|API:오류 및 경고]]를 참조하십시오.",
@@ -89,6 +90,7 @@
        "apihelp-query+pageswithprop-param-dir": "정렬 순서",
        "apihelp-query+prefixsearch-param-search": "문자열 검색",
        "apihelp-unblock-description": "사용자를 차단 해제합니다.",
+       "apihelp-rawfm-description": "출력 데이터, 디버깅 요소를 포함, (HTML에 포함된)JSON형식.",
        "api-help-title": "미디어위키 API 도움말",
        "api-help-lead": "이 페이지는 자동으로 생성된 미디어위키 API 도움말 문서입니다.\n\n설명 문서 및 예시: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "메인 모듈",
index c8f8ac4..60d2a05 100644 (file)
        "apihelp-yamlfm-description": "Donn de Dahte em <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"YAML Ain't Markup Language\">YAML</i>-Fommahd schöhn met <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i> ußjävve.",
        "api-format-title": "Wat et <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"Application Programming Interface\">API</i> ußjohv.",
        "api-format-prettyprint-header-only-html": "Dat heh es en <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"HyperText Markup Language\">HTML</i>_Daaschtällong un för et Fähersöhke jedaach. Dadd is för Aanwändongsprojramme nit ze bruche.\n\nEn de [[mw:API|complete Dokkemäntazjohn]] un de [[Special:ApiHelp/main|API Hölp_Sigg]] kam_mer doh mih drövver lässe.",
-       "api-orm-param-props": "De Fällder zom Affrohre.",
-       "api-orm-param-limit": "De jrühßte Aanzahl vun Reihje zom zeröckjävve.",
        "api-pageset-param-titles": "En Leß vun Övverschreffte för ze beärbeide.",
        "api-pageset-param-pageids": "En Leß vun Kännonge vun Sigge för ze beärbeide.",
        "api-pageset-param-revids": "En Leß vun Kännonge vun Väsjohne för ze beärbeide.",
index 96741ca..b1d27c8 100644 (file)
@@ -5,7 +5,8 @@
                        "Dianakc",
                        "Cainamarques",
                        "Rhcastilhos",
-                       "Macofe"
+                       "Macofe",
+                       "Almondega"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
        "apihelp-query+links-param-limit": "Quantos links retornar.",
        "apihelp-query+linkshere-param-limit": "Quantos retornar.",
        "apihelp-query+prefixsearch-param-limit": "O número máximo a se retornar.",
+       "apihelp-query+search-param-prop": "Que propriedades retornar:",
+       "apihelp-query+search-paramvalue-prop-size": "Adiciona o tamanho da página em bytes.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Adiciona a contagem de palavras da página.",
+       "apihelp-query+search-paramvalue-prop-timestamp": "Adiciona a marcação de data (timestamp) de quando a página foi editada pela última vez.",
+       "apihelp-query+search-paramvalue-prop-snippet": "Adiciona um fragmento analisado da página.",
+       "apihelp-query+search-paramvalue-prop-titlesnippet": "Adiciona um fragmento analisado do título da página.",
        "apihelp-query+search-param-limit": "Quantas páginas retornar.",
        "apihelp-query+templates-param-limit": "Quantas predefinições retornar.",
        "apihelp-query+transcludedin-param-limit": "Quantos retornar.",
index 9710e16..125a155 100644 (file)
        "api-format-title": "{{technical}}\nPage title when API output is pretty-printed in HTML.",
        "api-format-prettyprint-header": "{{technical}} Displayed as a header when API output is pretty-printed in HTML.\n\nParameters:\n* $1 - Format name\n* $2 - Non-pretty-printing module name",
        "api-format-prettyprint-header-only-html": "{{technical}} Displayed as a header when API output is pretty-printed in HTML, but there is no non-html module.\n\nParameters:\n* $1 - Format name",
-       "api-orm-param-props": "{{doc-apihelp-param|orm|props|description=the \"props\" parameter in subclasses of ApiQueryORM}}",
-       "api-orm-param-limit": "{{doc-apihelp-param|orm|limit|description=the \"limit\" parameter in subclasses of ApiQueryORM}}",
        "api-pageset-param-titles": "{{doc-apihelp-param|pageset|titles|description=the \"titles\" parameter in pageset-using modules}}",
        "api-pageset-param-pageids": "{{doc-apihelp-param|pageset|pageids|description=the \"pageids\" parameter in pageset-using modules}}",
        "api-pageset-param-revids": "{{doc-apihelp-param|pageset|revids|description=the \"revids\" parameter in pageset-using modules}}",
index dfc30a8..5ce21c5 100644 (file)
@@ -11,7 +11,8 @@
                        "Ochilov",
                        "Nzeemin",
                        "INS Pirat",
-                       "Macofe"
+                       "Macofe",
+                       "Краснорядцева Елена"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки, и может измениться в любой момент. Подпишитесь на  [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом \"MediaWiki-API-Error\", после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].",
        "apihelp-query+revisions-example-first5-user": "Получить 5 первых версий <kbd>Main Page</kbd> которые созданы пользователями <kbd>MediaWiki default</kbd>.",
        "apihelp-query+revisions+base-param-limit": "Ограничение на количество версий которое будут вовзращено",
        "apihelp-query+search-description": "Выполнить полнотекстовый поиск.",
+       "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Возвращает список расширений (типы файлов), которые доступны к загрузке",
        "apihelp-query+tags-description": "Список изменерий тегов.",
        "apihelp-query+tags-example-simple": "Лист доступных тегов",
        "apihelp-query+templates-param-namespace": "Показывать шаблоны только из данного списка имен",
        "apihelp-xml-description": "Выходные данные в формате XML.",
        "apihelp-yaml-description": "Выходные данные в формате yaml.",
        "api-format-title": "Результат MediaWiki API",
-       "api-orm-param-props": "Поля для запроса.",
-       "api-orm-param-limit": "Максимальное количество возвращаемых строк.",
        "api-pageset-param-titles": "Список заголовков для работы.",
        "api-pageset-param-pageids": "Список страниц идентификаторов для работы.",
        "api-pageset-param-revids": "Список идентификаторов версий для работы.",
diff --git a/includes/api/i18n/sd.json b/includes/api/i18n/sd.json
new file mode 100644 (file)
index 0000000..4cfc927
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mehtab ahmed"
+               ]
+       },
+       "apihelp-query+allrevisions-description": "سڀني نظر ثانين جي فهرست ٺاهيو."
+}
index 08237f3..e195520 100644 (file)
        "api-format-title": "Результат запиту до API MediaWiki",
        "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметру <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
        "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
-       "api-orm-param-props": "Поля до запиту.",
-       "api-orm-param-limit": "Яке максимальне число рядків повернути.",
        "api-pageset-param-titles": "Список назв над якими працювати.",
        "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
        "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
index ef70589..09e9077 100644 (file)
@@ -675,7 +675,7 @@ class MessageCache {
                                'hash' => $cache['HASH'],
                                'latest' => isset( $cache['LATEST'] ) ? $cache['LATEST'] : 0
                        ),
-                       WANObjectCache::TTL_NONE
+                       WANObjectCache::TTL_INDEFINITE
                );
        }
 
index fdc9944..01f10d8 100644 (file)
@@ -76,6 +76,21 @@ class ChangesList extends ContextSource {
                }
        }
 
+       /**
+        * Format a line
+        *
+        * @since 1.27
+        *
+        * @param RecentChange $rc Passed by reference
+        * @param bool $watched (default false)
+        * @param int $linenumber (default null)
+        *
+        * @return string|bool
+        */
+       public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
+               throw new RuntimeException( 'recentChangesLine should be implemented' );
+       }
+
        /**
         * Sets the list to use a "<li class='watchlist-(namespace)-(page)'>" tag
         * @param bool $value
index 1dcb7ae..f10307d 100644 (file)
@@ -83,15 +83,16 @@ class EnhancedChangesList extends ChangesList {
        /**
         * Format a line for enhanced recentchange (aka with javascript and block of lines).
         *
-        * @param RecentChange $baseRC
+        * @param RecentChange $rc
         * @param bool $watched
+        * @param int $linenumber (default null)
         *
         * @return string
         */
-       public function recentChangesLine( &$baseRC, $watched = false ) {
+       public function recentChangesLine( &$rc, $watched = false, $linenumber = null ) {
 
                $date = $this->getLanguage()->userDate(
-                       $baseRC->mAttribs['rc_timestamp'],
+                       $rc->mAttribs['rc_timestamp'],
                        $this->getUser()
                );
 
@@ -106,7 +107,7 @@ class EnhancedChangesList extends ChangesList {
                        $this->lastdate = $date;
                }
 
-               $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $baseRC, $watched );
+               $cacheEntry = $this->cacheEntryFactory->newFromRecentChange( $rc, $watched );
                $this->addCacheEntry( $cacheEntry );
 
                return $ret;
index 64ae1c6..9c5127f 100644 (file)
@@ -396,8 +396,9 @@ class DatabasePostgres extends Database {
                        $sql = mb_convert_encoding( $sql, 'UTF-8' );
                }
                // Clear previously left over PQresult
-               while ( $res = pg_get_result( $this->mConn ) )
+               while ( $res = pg_get_result( $this->mConn ) ) {
                        pg_free_result( $res );
+               }
                if ( pg_send_query( $this->mConn, $sql ) === false ) {
                        throw new DBUnexpectedError( $this, "Unable to post new query to PostgreSQL\n" );
                }
index fbc8c8c..eda374a 100644 (file)
@@ -549,7 +549,7 @@ class LoadBalancer {
                }
 
                # Make master connections read only if in lagged slave mode
-               if ( $masterOnly && $this->getServerCount() > 1 && $this->getLaggedSlaveMode() ) {
+               if ( $masterOnly && $this->getServerCount() > 1 && $this->getLaggedSlaveMode( $wiki ) ) {
                        $conn->setLBInfo( 'readOnlyReason',
                                'The database has been automatically locked ' .
                                'while the slave database servers catch up to the master'
@@ -1142,11 +1142,13 @@ class LoadBalancer {
 
        /**
         * @note This method will trigger a DB connection if not yet done
+        *
+        * @param string|bool $wiki Wiki ID, or false for the current wiki
         * @return bool Whether the generic connection for reads is highly "lagged"
         */
-       public function getLaggedSlaveMode() {
+       public function getLaggedSlaveMode( $wiki = false ) {
                # Get a generic reader connection
-               $this->getConnection( DB_SLAVE );
+               $this->getConnection( DB_SLAVE, false, $wiki );
 
                return $this->mLaggedSlaveMode;
        }
index d784840..4a7b991 100644 (file)
@@ -108,7 +108,7 @@ class LinksDeletionUpdate extends SqlDataUpdate implements EnqueueableDataUpdate
                        'wiki' => $this->mDb->getWikiID(),
                        'job'  => new JobSpecification(
                                'deleteLinks',
-                               array( 'pageId' => $this->page->getId() ),
+                               array( 'pageId' => $this->pageId ),
                                array( 'removeDuplicates' => true ),
                                $this->page->getTitle()
                        )
index d327433..14810da 100644 (file)
@@ -420,7 +420,7 @@ class DiffEngine {
                        }
 
                        $x1 = $xoff + (int)( ( $numer + ( $xlim - $xoff ) * $chunk ) / $nchunks );
-                       // @codingStandardsIgnoreFile Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
+                       // @codingStandardsIgnoreStart Ignore Squiz.WhiteSpace.SemicolonSpacing.Incorrect
                        for ( ; $x < $x1; $x++ ) {
                                // @codingStandardsIgnoreEnd
                                $line = $flip ? $this->yv[$x] : $this->xv[$x];
@@ -444,7 +444,7 @@ class DiffEngine {
                                        if ( $y > $this->seq[$k - 1] ) {
                                                assert( '$y < $this->seq[$k]' );
                                                // Optimization: this is a common case:
-                                               //      next match is just replacing previous match.
+                                               // next match is just replacing previous match.
                                                $this->in_seq[$this->seq[$k]] = false;
                                                $this->seq[$k] = $y;
                                                $this->in_seq[$y] = 1;
index 4e50070..5734902 100644 (file)
@@ -380,10 +380,12 @@ TXT;
                                $text .= "{$pad}#{$level} [internal function]: ";
                        }
 
-                       if ( isset( $frame['class'] ) ) {
+                       if ( isset( $frame['class'] ) && isset( $frame['type'] ) && isset( $frame['function'] ) ) {
                                $text .= $frame['class'] . $frame['type'] . $frame['function'];
-                       } else {
+                       } elseif ( isset( $frame['function'] ) ) {
                                $text .= $frame['function'];
+                       } else {
+                               $text .= 'NO_FUNCTION_GIVEN';
                        }
 
                        if ( isset( $frame['args'] ) ) {
index 13755e3..2fadfce 100644 (file)
@@ -59,6 +59,7 @@
        "config-db-username": "اسم مستخدم قاعدة البيانات:",
        "config-db-password": "كلمة سر قاعدة البيانات:",
        "config-db-prefix": "بادئة جدول قاعدة البيانات:",
+       "config-db-charset": "مجموعة محارف قاعدة البيانات",
        "config-db-port": "منفذ قاعدة البيانات:",
        "config-db-schema": "سكيما لميدياويكي",
        "config-type-mysql": "MySQL (أو متوافق)",
@@ -74,6 +75,7 @@
        "config-mysql-engine": "محرك التخزين",
        "config-mysql-innodb": "إنو دي بي",
        "config-mysql-myisam": "ماي إسام",
+       "config-mysql-charset": "مجموعة محارف قاعدة البيانات",
        "config-mysql-binary": "ثنائي",
        "config-mysql-utf8": "يو تي إف-8",
        "config-site-name": "اسم الويكي:",
        "config-email-sender": "يرجع عنوان البريد الإلكتروني:",
        "config-upload-settings": "الصور وتحميل الملفات",
        "config-upload-enable": "تمكين تحميل الملفات",
+       "config-upload-deleted": "المجلد للملفات المحذوفة:",
        "config-logo": "مسار الشعار:",
        "config-cc-again": "اختر مجددًا",
        "config-advanced-settings": "ضبط متقدم",
        "config-install-user-alreadyexists": "المستخدم \"$1\" موجود بالفعل",
        "config-install-user-create-failed": "إنشاء مستخدم \"$1\" فشل:$2",
        "config-install-tables": "إنشاء الجداول",
+       "config-install-stats": "بدء الإحصاءات",
        "config-install-keys": "توليد المفاتيح السرية",
        "config-install-mainpage": "إنشاء صفحة رئيسية بالمحتوى الافتراضي",
        "config-help": "مساعدة",
index 1fd98ff..dddba19 100644 (file)
@@ -14,7 +14,8 @@
                        "Seb35",
                        "Mar(c)",
                        "Sjoerddebruin",
-                       "Esketti"
+                       "Esketti",
+                       "JaapDeKleine"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
@@ -72,7 +73,7 @@
        "config-magic-quotes-sybase": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.info.php#ini.magic-quotes-runtime magic_quotes_sybase] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-mbstring": "'''Onherstelbare fout: [http://www.php.net/manual/en/ref.mbstring.php#mbstring.overload mbstring.func_overload] is actief!'''\nDeze instelling zorgt voor onvoorspelbare gegevenscorruptie.\nU kunt MediaWiki niet installeren tenzij deze instelling is uitgeschakeld.",
        "config-safe-mode": "'''Waarschuwing:'''\n'''PHP's [http://www.php.net/features.safe-mode veilige modus] is actief.'''\nDit kan problemen veroorzaken, vooral bij het uploaden van bestanden en ondersteuning van <code>math</code>.",
-       "config-xml-bad": "PHP-XML-module ontbreekt.\nMediaWiki is vereist functies in deze module en zal niet werken in deze configuratie.\nMoet u de php-xml-RPM pakket.",
+       "config-xml-bad": "PHP-XML-module ontbreekt.\nMediaWiki vereist functies in deze module en zal niet werken in deze configuratie.\nMisschien werkt het om het php-xml RPM te installeren",
        "config-pcre-old": "'''Onherstelbare fout:''' PCRE $1 of een latere versie is vereist.\nUw uitvoerbare versie van PHP is gekoppeld met PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Meer informatie].",
        "config-pcre-no-utf8": "'''Fataal:''' de module PRCE van PHP lijkt te zijn gecompileerd zonder ondersteuning voor PCRE_UTF8.\nMediaWiki heeft ondersteuning voor UTF-8 nodig om correct te kunnen werken.",
        "config-memory-raised": "PHP's <code>memory_limit</code> is $1 en is verhoogd tot $2.",
        "config-db-install-account": "Gebruiker voor installatie",
        "config-db-username": "Gebruikersnaam voor database:",
        "config-db-password": "Wachtwoord voor database:",
-       "config-db-password-empty": "Voer een wachtwoord in voor de nieuwe databasegebruiker: $1.\nHoewel het wellicht mogelijk is gebruikers aan te maken zonder wachtwoord, is dit niet veilig.",
-       "config-db-username-empty": "U moet een waarde invoeren voor \"{{int:config-db-username}}\".",
        "config-db-install-username": "Voer de gebruikersnaam in die gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet de gebruikersnaam van de MediaWikigebruiker. Dit is de gebruikersnaam voor de database.",
        "config-db-install-password": "Voer het wachtwoord in dat gebruikt moet worden om te verbinden met de database tijdens het installatieproces. Dit is niet het wachtwoord van de MediaWikigebruiker. Dit is het wachtwoord voor de database.",
        "config-db-install-help": "Voer de gebruikersnaam en het wachtwoord in die worden gebruikt voor de databaseverbinding tijdens het installatieproces.",
index 02e9797..d3569f7 100644 (file)
@@ -1,8 +1,9 @@
 {
        "@metadata": {
                "authors": [
-                       "Sindhu"
+                       "Sindhu",
+                       "Aursani"
                ]
        },
-       "config-xml-bad": "PHP جو XML ماڊيول کٽل آهي. ميڊيا وڪيءَ کي هن فنڪشن ۾ ماڊيول گھربل آهن ۽ ترتيب يا ڪنفيگيوريشن ۾ ڪم نه ڪندي. \nتوهان کي گھرجي ته php-xml RPM پيڪيج انسٽال ڪريو."
+       "config-xml-bad": "PHP جو XML ماڊيول کٽل آهي. ذريعات‌وڪيءَ کي ان ماڊيول ۾  فنڪشنس گھربل آهن ۽ اها موجوده ترتيب يا ڪنفيگيوريشن ۾ ڪم نہ ڪندي. \nتوهان کي گھرجي تہ php-xml RPM پيڪيج تنصيب ڪريو."
 }
index 49d05d4..216d9b7 100644 (file)
@@ -119,7 +119,6 @@ class IEUrlExtension {
 
                if ( !preg_match( '/^[a-zA-Z0-9_-]+$/', $extension ) ) {
                        // Non-alphanumeric extension, unlikely to be registered.
-                       //
                        // The regex above is known to match all registered file extensions
                        // in a default Windows XP installation. It's important to allow
                        // extensions with ampersands and percent signs, since that reduces
index 8cbd48a..fc74985 100644 (file)
@@ -45,9 +45,13 @@ use Psr\Log\NullLogger;
 abstract class BagOStuff implements LoggerAwareInterface {
        /** @var array[] Lock tracking */
        protected $locks = array();
+
        /** @var integer */
        protected $lastError = self::ERR_NONE;
 
+       /** @var string */
+       protected $keyspace = 'local';
+
        /** @var LoggerInterface */
        protected $logger;
 
@@ -70,6 +74,10 @@ abstract class BagOStuff implements LoggerAwareInterface {
                } else {
                        $this->setLogger( new NullLogger() );
                }
+
+               if ( isset( $params['keyspace'] ) ) {
+                       $this->keyspace = $params['keyspace'];
+               }
        }
 
        /**
@@ -602,4 +610,39 @@ abstract class BagOStuff implements LoggerAwareInterface {
        protected function isInteger( $value ) {
                return ( is_int( $value ) || ctype_digit( $value ) );
        }
+
+       /**
+        * Construct a cache key.
+        *
+        * @since 1.27
+        * @param string $keyspace
+        * @param array $args
+        * @return string
+        */
+       public function makeKeyInternal( $keyspace, $args ) {
+               $key = $keyspace . ':' . implode( ':', $args );
+               return strtr( $key, ' ', '_' );
+       }
+
+       /**
+        * Make a global cache key.
+        *
+        * @since 1.27
+        * @param string $args,...
+        * @return string
+        */
+       public function makeGlobalKey() {
+               return $this->makeKeyInternal( 'global', func_get_args() );
+       }
+
+       /**
+        * Make a cache key, scoped to this instance's keyspace.
+        *
+        * @since 1.27
+        * @param string $args,...
+        * @return string
+        */
+       public function makeKey() {
+               return $this->makeKeyInternal( $this->keyspace, func_get_args() );
+       }
 }
index 71c8a93..1a0e9bb 100644 (file)
@@ -92,7 +92,7 @@ class WANObjectCache {
        const LOCK_TSE = 1;
 
        /** Idiom for set()/getWithSetCallback() TTL being "forever" */
-       const TTL_NONE = 0;
+       const TTL_INDEFINITE = 0;
        /** Idiom for getWithSetCallback() callbacks to avoid calling set() */
        const TTL_UNCACHEABLE = -1;
        /** Idiom for getWithSetCallback() callbacks to 'lockTSE' logic */
@@ -289,7 +289,8 @@ class WANObjectCache {
         *
         * @param string $key Cache key
         * @param mixed $value
-        * @param integer $ttl Seconds to live [0=forever]
+        * @param integer $ttl Seconds to live. Special values are:
+        *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         * @param array $opts Options map:
         *   - lag     : Seconds of slave lag. Typically, this is either the slave lag
         *               before the data was read or, if applicable, the slave lag before
@@ -633,7 +634,7 @@ class WANObjectCache {
         *
         * @param string $key Cache key
         * @param integer $ttl Seconds to live for key updates. Special values are:
-        *   - WANObjectCache::TTL_NONE : Cache forever
+        *   - WANObjectCache::TTL_INDEFINITE: Cache forever
         *   - WANObjectCache::TTL_UNCACHEABLE: Do not cache at all
         * @param callable $callback Value generation function
         * @param array $opts Options map:
index 692e5a6..faf40b3 100644 (file)
@@ -161,6 +161,8 @@ class BitmapHandler extends TransformationalImageHandler {
                        ( $params['comment'] !== ''
                                ? array( '-set', 'comment', $this->escapeMagickProperty( $params['comment'] ) )
                                : array() ),
+                       // T108616: Avoid exposure of local file path
+                       array( '+set', 'Thumb::URI' ),
                        array( '-depth', 8 ),
                        $sharpen,
                        array( '-rotate', "-$rotation" ),
index a1cb01c..5b57821 100644 (file)
@@ -1,6 +1,4 @@
 <?php
-// @codingStandardsIgnoreFile
-// PHPCS can't handle the level of nesting in this file
 /**
  * Formatting of image metadata values into human readable form.
  *
index 840b9d8..999be92 100644 (file)
@@ -76,7 +76,7 @@ application/x-bzip2   [ARCHIVE]
 application/x-tar      [ARCHIVE]
 application/x-stuffit  [ARCHIVE]
 application/x-opc+zip  [ARCHIVE]
-
+application/x-7z-compressed [ARCHIVE]
 
 text/javascript application/x-javascript application/x-ecmascript text/ecmascript      [EXECUTABLE]
 application/x-bash     [EXECUTABLE]
index 210610a..3b9899f 100644 (file)
@@ -20,6 +20,7 @@ application/vnd.wap.wbxml wbxml
 application/vnd.wap.wmlc wmlc
 application/vnd.wap.wmlscriptc wmlsc
 application/voicexml+xml vxml
+application/x-7z-compressed 7z
 application/x-bcpio bcpio
 application/x-bzip bz
 application/x-bzip2 bz2
index ea0fb44..d739d8e 100644 (file)
@@ -123,6 +123,31 @@ class ObjectCache {
                return self::newFromParams( $wgObjectCaches[$id] );
        }
 
+       /**
+        * Get the default keyspace for this wiki.
+        *
+        * This is either the value of the `CachePrefix` configuration variable,
+        * or (if the former is unset) the `DBname` configuration variable, with
+        * `DBprefix` (if defined).
+        *
+        * @return string
+        */
+       public static function getDefaultKeyspace() {
+               global $wgCachePrefix, $wgDBname, $wgDBprefix;
+
+               $keyspace = $wgCachePrefix;
+               if ( is_string( $keyspace ) && $keyspace !== '' ) {
+                       return $keyspace;
+               }
+
+               $keyspace = $wgDBname;
+               if ( is_string( $wgDBprefix ) && $wgDBprefix !== '' ) {
+                       $keyspace .= '-' . $wgDBprefix;
+               }
+
+               return $keyspace;
+       }
+
        /**
         * Create a new cache object from parameters.
         *
@@ -142,6 +167,9 @@ class ObjectCache {
                        // have all logging suddenly disappear
                        $params['logger'] = LoggerFactory::getInstance( 'objectcache' );
                }
+               if ( !isset( $params['keyspace'] ) ) {
+                       $params['keyspace'] = self::getDefaultKeyspace();
+               }
                if ( isset( $params['factory'] ) ) {
                        return call_user_func( $params['factory'], $params );
                } elseif ( isset( $params['class'] ) ) {
@@ -267,9 +295,9 @@ class ObjectCache {
         * @return BagOStuff
         */
        public static function getMainClusterInstance() {
-               $config = RequestContext::getMain()->getConfig();
-               $id = $config->get( 'MainCacheType' );
-               return self::getInstance( $id );
+               global $wgMainCacheType;
+
+               return self::getInstance( $wgMainCacheType );
        }
 
        /**
index d656bad..3ec3e89 100644 (file)
@@ -2780,7 +2780,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                $user = is_null( $user ) ? $wgUser : $user;
                if ( !Hooks::run( 'ArticleDelete',
-                       array( &$this, &$user, &$reason, &$error, &$status )
+                       array( &$this, &$user, &$reason, &$error, &$status, $suppress )
                ) ) {
                        if ( $status->isOK() ) {
                                // Hook aborted but didn't set a fatal status
@@ -3395,22 +3395,44 @@ class WikiPage implements Page, IDBAccessObject {
                                }
 
                                if ( count( $added ) ) {
-                                       $insertRows = array();
-                                       foreach ( $added as $cat ) {
-                                               $insertRows[] = array(
-                                                       'cat_title'   => $cat,
-                                                       'cat_pages'   => 1,
-                                                       'cat_subcats' => ( $ns == NS_CATEGORY ) ? 1 : 0,
-                                                       'cat_files'   => ( $ns == NS_FILE ) ? 1 : 0,
-                                               );
-                                       }
-                                       $dbw->upsert(
+                                       $existingAdded = $dbw->selectFieldValues(
                                                'category',
-                                               $insertRows,
-                                               array( 'cat_title' ),
-                                               $addFields,
-                                               $method
+                                               'cat_title',
+                                               array( 'cat_title' => $added ),
+                                               __METHOD__
                                        );
+
+                                       // For category rows that already exist, do a plain
+                                       // UPDATE instead of INSERT...ON DUPLICATE KEY UPDATE
+                                       // to avoid creating gaps in the cat_id sequence.
+                                       if ( count( $existingAdded ) ) {
+                                               $dbw->update(
+                                                       'category',
+                                                       $addFields,
+                                                       array( 'cat_title' => $existingAdded ),
+                                                       __METHOD__
+                                               );
+                                       }
+
+                                       $missingAdded = array_diff( $added, $existingAdded );
+                                       if ( count( $missingAdded ) ) {
+                                               $insertRows = array();
+                                               foreach ( $missingAdded as $cat ) {
+                                                       $insertRows[] = array(
+                                                               'cat_title'   => $cat,
+                                                               'cat_pages'   => 1,
+                                                               'cat_subcats' => ( $ns == NS_CATEGORY ) ? 1 : 0,
+                                                               'cat_files'   => ( $ns == NS_FILE ) ? 1 : 0,
+                                                       );
+                                               }
+                                               $dbw->upsert(
+                                                       'category',
+                                                       $insertRows,
+                                                       array( 'cat_title' ),
+                                                       $addFields,
+                                                       $method
+                                               );
+                                       }
                                }
 
                                if ( count( $deleted ) ) {
@@ -3540,7 +3562,7 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @param Content|null $content Optional Content object for determining the
         *   necessary updates.
-        * @return array An array of DataUpdates objects
+        * @return DataUpdate[]
         */
        public function getDeletionUpdates( Content $content = null ) {
                if ( !$content ) {
index 3745238..37b45a6 100644 (file)
@@ -44,7 +44,7 @@ class ParserOutput extends CacheTime {
        public $mIndicators = array();
 
        /**
-        * @var string $mTitleText Title text of the chosen language variant
+        * @var string $mTitleText Title text of the chosen language variant, as HTML.
         */
        public $mTitleText;
 
@@ -700,9 +700,13 @@ class ParserOutput extends CacheTime {
 
        /**
         * Override the title to be used for display
-        * -- this is assumed to have been validated
+        *
+        * @note this is assumed to have been validated
         * (check equal normalisation, etc.)
         *
+        * @note this is expected to be safe HTML,
+        * ready to be served to the client.
+        *
         * @param string $text Desired title text
         */
        public function setDisplayTitle( $text ) {
@@ -711,9 +715,12 @@ class ParserOutput extends CacheTime {
        }
 
        /**
-        * Get the title to be used for display
+        * Get the title to be used for display.
+        *
+        * As per the contract of setDisplayTitle(), this is safe HTML,
+        * ready to be served to the client.
         *
-        * @return string
+        * @return string HTML
         */
        public function getDisplayTitle() {
                $t = $this->getTitleText();
index f811231..b415bca 100644 (file)
@@ -37,7 +37,7 @@ class ResourceLoaderEditToolbarModule extends ResourceLoaderFileModule {
                $vars = parent::getLessVars( $context );
                $language = Language::factory( $context->getLanguage() );
                foreach ( $language->getImageFiles() as $key => $value ) {
-                       $vars[ $key ] = CSSMin::serializeStringValue( $value );
+                       $vars[$key] = CSSMin::serializeStringValue( $value );
                }
                return $vars;
        }
index 7aac3b8..7ffb427 100644 (file)
@@ -73,6 +73,25 @@ abstract class RevDelList extends RevisionListBase {
                return $target;
        }
 
+       /**
+        * Indicate whether any item in this list is suppressed
+        * @since 1.25
+        * @return bool
+        */
+       public function areAnySuppressed() {
+               $bit = $this->getSuppressBit();
+
+               // @codingStandardsIgnoreStart Generic.CodeAnalysis.ForLoopWithTestFunctionCall.NotAllowed
+               for ( $this->reset(); $this->current(); $this->next() ) {
+                       // @codingStandardsIgnoreEnd
+                       $item = $this->current();
+                       if ( $item->getBits() & $bit ) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        /**
         * Set the visibility for the revisions in this list. Logging and
         * transactions are done here.
index cd6cc76..e125d94 100644 (file)
@@ -361,6 +361,8 @@ class SpecialBlock extends FormSpecialPage {
        protected function postText() {
                $links = array();
 
+               $this->getOutput()->addModuleStyles( 'mediawiki.special' );
+
                # Link to the user's contributions, if applicable
                if ( $this->target instanceof User ) {
                        $contribsPage = SpecialPage::getTitleFor( 'Contributions', $this->target->getName() );
index 4c0c75f..8c9a76b 100644 (file)
@@ -151,6 +151,7 @@ class FileDuplicateSearchPage extends QueryPage {
                        if ( $img ) {
                                $thumb = $img->transform( array( 'width' => 120, 'height' => 120 ) );
                                if ( $thumb ) {
+                                       $out->addModuleStyles( 'mediawiki.special' );
                                        $out->addHTML( '<div id="mw-fileduplicatesearch-icon">' .
                                                $thumb->toHtml( array( 'desc-link' => false ) ) . '<br />' .
                                                $this->msg( 'fileduplicatesearch-info' )->numParams(
index 72d21eb..553e2b1 100644 (file)
@@ -269,13 +269,27 @@ class SpecialRedirect extends FormSpecialPage {
         */
        protected function getSubpagesForPrefixSearch() {
                return array(
-                       "file",
-                       "page",
-                       "revision",
-                       "user",
+                       'file',
+                       'page',
+                       'revision',
+                       'user',
                );
        }
 
+       /**
+        * @return bool
+        */
+       public function requiresWrite() {
+               return false;
+       }
+
+       /**
+        * @return bool
+        */
+       public function requiresUnblock() {
+               return false;
+       }
+
        protected function getGroupName() {
                return 'redirects';
        }
index 7c27ac4..65cb8e5 100644 (file)
@@ -170,11 +170,10 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
                $this->typeLabels = self::$UILabels[$this->typeName];
                $list = $this->getList();
                $list->reset();
-               $bitfield = $list->current()->getBits();
                $this->mIsAllowed = $user->isAllowed( RevisionDeleter::getRestriction( $this->typeName ) );
                $canViewSuppressedOnly = $this->getUser()->isAllowed( 'viewsuppressed' ) &&
                        !$this->getUser()->isAllowed( 'suppressrevision' );
-               $pageIsSuppressed = $bitfield & Revision::DELETED_RESTRICTED;
+               $pageIsSuppressed = $list->areAnySuppressed();
                $this->mIsAllowed = $this->mIsAllowed && !( $canViewSuppressedOnly && $pageIsSuppressed );
 
                $this->otherReason = $request->getVal( 'wpReason' );
@@ -408,6 +407,8 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                // Show form if the user can submit
                if ( $this->mIsAllowed ) {
+                       $out->addModuleStyles( 'mediawiki.special' );
+
                        $form = Xml::openElement( 'form', array( 'method' => 'post',
                                        'action' => $this->getPageTitle()->getLocalURL( array( 'action' => 'submit' ) ),
                                        'id' => 'mw-revdel-form-revisions' ) ) .
index 00ee327..447c3ef 100644 (file)
@@ -587,7 +587,7 @@ class PageArchive {
                $restored = 0;
 
                foreach ( $result as $row ) {
-                       // Check for key dupes due to shitty archive integrity.
+                       // Check for key dupes due to needed archive integrity.
                        if ( $row->ar_rev_id ) {
                                $exists = $dbw->selectField( 'revision', '1',
                                        array( 'rev_id' => $row->ar_rev_id ), __METHOD__ );
index ad44076..6692bb6 100644 (file)
@@ -475,6 +475,14 @@ class SpecialUpload extends SpecialPage {
                        }
                }
 
+               // This is as late as we can throttle, after expected issues have been handled
+               if ( UploadBase::isThrottled( $this->getUser() ) ) {
+                       $this->showRecoverableUploadError(
+                               $this->msg( 'actionthrottledtext' )->escaped()
+                       );
+                       return;
+               }
+
                // Get the page text if this is not a reupload
                if ( !$this->mForReUpload ) {
                        $pageText = self::getInitialPageText( $this->mComment, $this->mLicense,
@@ -819,6 +827,7 @@ class UploadForm extends HTMLForm {
 
                # Add a link to edit MediaWik:Licenses
                if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
+                       $this->getOutput()->addModuleStyles( 'mediawiki.special' );
                        $licensesLink = Linker::linkKnown(
                                $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
                                $this->msg( 'licenses-edit' )->escaped(),
index 1ed392f..a6fe1b5 100644 (file)
@@ -31,6 +31,10 @@ class UserrightsPage extends SpecialPage {
        # either a GET parameter or a subpage-style parameter, so have a member
        # variable for it.
        protected $mTarget;
+       /*
+        * @var null|User $mFetchedUser The user object of the target username or null.
+        */
+       protected $mFetchedUser = null;
        protected $isself = false;
 
        public function __construct() {
@@ -75,6 +79,8 @@ class UserrightsPage extends SpecialPage {
                // any groups, it's a bit silly to give them the user search prompt.
 
                $user = $this->getUser();
+               $request = $this->getRequest();
+               $out = $this->getOutput();
 
                /*
                 * If the user is blocked and they only have "partial" access
@@ -85,8 +91,6 @@ class UserrightsPage extends SpecialPage {
                        throw new UserBlockedError( $user->getBlock() );
                }
 
-               $request = $this->getRequest();
-
                if ( $par !== null ) {
                        $this->mTarget = $par;
                } else {
@@ -110,13 +114,17 @@ class UserrightsPage extends SpecialPage {
                        $this->isself = true;
                }
 
+               $fetchedStatus = $this->fetchUser( $this->mTarget );
+               if ( $fetchedStatus->isOk() ) {
+                       $this->mFetchedUser = $fetchedStatus->value;
+               }
+
                if ( !$this->userCanChangeRights( $user, true ) ) {
                        if ( $this->isself && $request->getCheck( 'success' ) ) {
                                // bug 48609: if the user just removed its own rights, this would
                                // leads it in a "permissions error" page. In that case, show a
                                // message that it can't anymore use this page instead of an error
                                $this->setHeaders();
-                               $out = $this->getOutput();
                                $out->wrapWikiMsg( "<div class=\"successbox\">\n$1\n</div>", 'userrights-removed-self' );
                                $out->returnToMain();
 
@@ -128,12 +136,19 @@ class UserrightsPage extends SpecialPage {
                        throw new PermissionsError( null, array( array( $msg ) ) );
                }
 
+               // show a successbox, if the user rights was saved successfully
+               if ( $request->getCheck( 'success' ) && $this->mFetchedUser !== null ) {
+                       $out->wrapWikiMsg(
+                               "<div class=\"successbox\">\n$1\n</div>",
+                               array( 'savedrights', $this->mFetchedUser->getName() )
+                       );
+               }
+
                $this->checkReadOnly();
 
                $this->setHeaders();
                $this->outputHeader();
 
-               $out = $this->getOutput();
                $out->addModuleStyles( 'mediawiki.special' );
                $this->addHelpLink( 'Help:Assigning permissions' );
 
@@ -149,14 +164,13 @@ class UserrightsPage extends SpecialPage {
                        $user->matchEditToken( $request->getVal( 'wpEditToken' ), $this->mTarget )
                ) {
                        // save settings
-                       $status = $this->fetchUser( $this->mTarget );
-                       if ( !$status->isOK() ) {
-                               $this->getOutput()->addWikiText( $status->getWikiText() );
+                       if ( !$fetchedStatus->isOK() ) {
+                               $this->getOutput()->addWikiText( $fetchedStatus->getWikiText() );
 
                                return;
                        }
 
-                       $targetUser = $status->value;
+                       $targetUser = $this->mFetchedUser;
                        if ( $targetUser instanceof User ) { // UserRightsProxy doesn't have this method (bug 61252)
                                $targetUser->clearInstanceCache(); // bug 38989
                        }
index 8514187..f600e32 100644 (file)
@@ -125,6 +125,16 @@ abstract class UploadBase {
                return true;
        }
 
+       /**
+        * Returns true if the user has surpassed the upload rate limit, false otherwise.
+        *
+        * @param User $user
+        * @return bool
+        */
+       public static function isThrottled( $user ) {
+               return $user->pingLimiter( 'upload' );
+       }
+
        // Upload handlers. Should probably just be a global.
        private static $uploadHandlers = array( 'Stash', 'File', 'Url' );
 
@@ -1763,7 +1773,7 @@ abstract class UploadBase {
                        // We're not using the normalized form of the extension.
                        // Normal form is lowercase, using most common of alternate
                        // extensions (eg 'jpg' rather than 'JPEG').
-                       //
+
                        // Check for another file using the normalized form...
                        $nt_lc = Title::makeTitle( NS_FILE, "{$partname}.{$normalizedExtension}" );
                        $file_lc = wfLocalFile( $nt_lc );
index b9a1bbf..b971c00 100644 (file)
@@ -221,7 +221,6 @@ class UploadStash {
                // If no key was supplied, make one.  a mysql insertid would be totally
                // reasonable here, except that for historical reasons, the key is this
                // random thing instead.  At least it's not guessable.
-               //
                // Some things that when combined will make a suitably unique key.
                // see: http://www.jwz.org/doc/mid.html
                list( $usec, $sec ) = explode( ' ', microtime() );
index b7767eb..7cedcc5 100644 (file)
@@ -68,10 +68,10 @@ class LanguageHy extends Language {
                                case 'accusative': # Հայցական հոլով
                                        # stub
                                        break;
-                               case 'instrumental':  #
+                               case 'instrumental':
                                        # stub
                                        break;
-                               case 'prepositional': #
+                               case 'prepositional':
                                        # stub
                                        break;
                        }
index 98d138d..3520298 100644 (file)
@@ -50,7 +50,6 @@ class LanguageWa extends Language {
                $datePreference = $this->dateFormat( $format );
 
                # ISO (YYYY-mm-dd) format
-               #
                # we also output this format for YMD (eg: 2001 January 15)
                if ( $datePreference == 'ISO 8601' ) {
                        $d = substr( $ts, 0, 4 ) . '-' . substr( $ts, 4, 2 ) . '-' . substr( $ts, 6, 2 );
@@ -64,7 +63,6 @@ class LanguageWa extends Language {
                }
 
                # Walloon format
-               #
                # we output this in all other cases
                $m = substr( $ts, 4, 2 );
                $n = substr( $ts, 6, 2 );
index 12a0a2f..2499aee 100644 (file)
        "upload-dialog-button-done": "Gedoen",
        "upload-dialog-button-save": "Stoor",
        "upload-dialog-button-upload": "Oplaai",
-       "upload-process-error": "'n Fout het voorgekom",
-       "upload-process-warning": "'n Waarskuwing is uitgereik",
        "upload-form-label-select-file": "Kies lêer",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Naam",
        "creditspage": "Outeursblad",
        "nocredits": "Geen outeursinligting is vir hierdie bladsy nie beskikbaar nie.",
        "spamprotectiontitle": "Spamfilter",
-       "spamprotectiontext": "Die bladsy wat u wou stoor was geblok deur die gemorspos-filter.\nHierdie situasie was waarskynlik deur 'n skakel na 'n eksterne webtuiste op ons swartlys veroorsaak.",
+       "spamprotectiontext": "Die bladsy wat u wou stoor is deur die gemorspos-filter geblokkeer. Dit is waarskynlik deur 'n eksterne skakel op ons swartlys veroorsaak.",
        "spamprotectionmatch": "Die volgende teks is wat ons gemorspos-filter geaktiveer het: $1",
        "spambot_username": "MediaWiki opruiming van spam",
        "spam_reverting": "Besig met terugrol na die laaste weergawe wat nie skakels na $1 bevat nie",
index 77d5e69..2dcf85b 100644 (file)
        "summary-preview": "Parapamja e përmbledhjes:",
        "subject-preview": "Parapâmja e temës/kryetitullit:",
        "blockedtitle": "Përdoruesi âsht i bllokuem",
-       "blockedtext": "'''Llogaria juej apo adresa IP âsht bllokue.'''\n\nBllokim âsht bâ prej $1.\nArsyeja e dhânë âsht ''$2''.\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuemi i synuem: $7\n\nMundeni me kontaktue $1 ose ndonji [[{{MediaWiki:Grouppage-sysop}}|administrator]] për me diskutue bllokimin.\nNuk mundeni me shfrytëzue funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikue adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokue.\nAdresa juej aktuale e IP âsht $3, dhe ID e bllokimit âsht #$5.\nJu lutemi përfshini këto shenime në të gjitha shkresat që i bâni.",
+       "blockedtext": "<strong>Llogaria e juaj apo adresa IP është bllokuar.</strong>\n\nBllokimi është bërë prej $1.\nArsyeja e dhënë është <em>$2</em>.\n\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuaru i synuar: $7\n\nJu mund të kontaktoni $1 ose ndonjë [[{{MediaWiki:Grouppage-sysop}}|administrator]] për ta diskutuar bllokimin.\nNuk mund ta shfrytëzoni funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikuar adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokuar.\nAdresa e juaj aktuale e IP është $3, dhe ID e bllokimit është #$5.\nJu lutemi përfshini këto shënime në të gjitha shkresat që i bëni.",
        "autoblockedtext": "Adresa juej e IPs âsht bllokue automatikisht meqenëse âsht përdorë prej nji përdoruesi tjetër, i cili âsht bllokue prej $1.\nArsyeja e dhânë âsht kjo:\n\n:''$2''\n\n* Fillimi i bllokimit: $8\n* Përfundimi i bllokimit: $6\n* I bllokuemi i synuem: $7\n\nMundeni me kontaktue $1 ose ndonji [[{{MediaWiki:Grouppage-sysop}}|administrator]] për me diskutue bllokimin.\n\nNuk mundeni me shfrytëzue funksionin 'dërgo email këtij përdoruesi' përveç nëse keni specifikue adresë emaili në [[Special:Preferences|parapëlqimet e llogarisë]] dhe nuk jeni bllokue.\n\nAdresa juej aktuale e IP âsht $3, dhe ID e bllokimit âsht #$5.\nJu lutemi përfshini këto shenime në të gjitha shkresat që i bâni.",
        "blockednoreason": "nuk âsht dhânë arsye",
        "whitelistedittext": "Duheni me u $1 për me redaktue artikuj.",
        "accmailtext": "Nji fjalëkalim i krijuem rastësisht për [[User talk:$1|$1]] u dërgue në $2.\n\nFjalëkalimi për këtë llogari mundet me u ndryshue në faqen ''[[Special:ChangePassword|ndrysho fjalëkalimin]]'' mbas kyçjes.",
        "newarticle": "(I ri)",
        "newarticletext": "Ke ndjekë nji vegëz për te nji faqe që nuk ekziston.\nMe krijue kët faqe, shkruej në kutinë ma poshtë (shih [$1 faqen e ndihmës] për ma shum udhzime).\nNëse ke hy këtu gabimisht, klikoje sustën '''mbrapa''' në shfletues.",
-       "anontalkpagetext": "----''Kjo âsht faqe diskutimi e nji përdoruesi anonim, i cili nuk ka krijue llogari, apo nuk e përdor atê.\nPrandej përdoret adresa numerike IP e tij për me identifikue.\nAdresa IP mundet me u shfrytëzue prej disa përdoruesve.\nNëse jeni përdorues anonim dhe keni përshtypjen se po ju drejtohen komente jorelevante, ju lutemi [[Special:UserLogin/signup|krijoni nji llogari]] apo [[Special:UserLogin|kyçuni]] për me iu shmângë ngatërrimit me përdorues tjerë anonim.''",
+       "anontalkpagetext": "<em>Kjo është faqe diskutimi e një përdoruesi anonim, i cili nuk ka krijuar llogari, apo nuk e përdor atë.</em>\nPrandaj ne do të përdorim adresën numerike të IP së tij për ta identifikuar.\nAdresa IP mund të shfrytëzohet prej disa përdoruesve.\nNëse jeni përdorues anonim dhe keni përshtypjen se po ju drejtohen komente jorelevante, ju lutemi [[Special:UserLogin/signup|krijoni një llogari]] apo [[Special:UserLogin|identifikohuni]] për të ju shmangur ngatërrimev me përdorues të tjerë anonim.",
        "noarticletext": "Momentalisht nuk ka tekst në këtë faqe.\nJu mundeni [[Special:Search/{{PAGENAME}}|me kërkue këtë titull]] në faqe tjera,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} me kërkue në regjistrat tematikisht të afërm],\napo [{{fullurl:{{FULLPAGENAME}}|action=edit}} me redaktue këtë faqe]</span>.",
        "userpage-userdoesnotexist": "Llogaria e përdoruesit \"<nowiki>$1</nowiki>\" nuk âsht regjistrue.\nJu lutemi kontrolloni nëse doni me krijue/redaktue këtë faqe.",
        "clearyourcache": "'''Shenim - Mbas ruejtjes, ka mundësi që duheni me shmângë memorizimin në cache për me i pâ ndryshimet.'''\n'''Mozilla / Firefox / Safari:''' mbani ''Shift'' tue klikue në ''Reload'', ose trusni ''Ctrl-F5'' ose ''Ctrl-R'' (''Command-R'' në Mac);\n'''Konqueror: '''klikoni ''Reload'' ose trusni ''F5'';\n'''Opera:''' fshini cachein në ''Tools → Preferences'';\n'''Internet Explorer:''' mbani ''Ctrl'' tue klikue në ''Refresh,'' ose trusni ''Ctrl-F5''.",
        "usercssyoucanpreview": "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue CSS para se me i regjistrue ndryshimet.",
        "userjsyoucanpreview": "'''Këshillë:''' Përdorni butonin 'Trego parapâmjen' për me testue JS para se me i regjistrue ndryshimet.",
        "usercsspreview": "'''Vini re, jeni tue pâ veç parapâmjen e CSSit tuej.'''\n'''Ende nuk e keni ruejtë!'''",
-       "userjspreview": "'''Vini re, jeni tue testue/pâ veç parapâmjen e JavaScriptit tuej.'''\n'''Ende nuk e keni ruejtë!'''",
+       "userjspreview": "<strong>Vini re, jeni duke testuar/parë vetëm parapamjen e JavaScriptit tuaj.\nEnde nuk e keni ruajtur!</strong>",
        "userinvalidcssjstitle": "'''Kujdes:''' Nuk ka pâmje me emën \"$1\".\nVini re që faqet .css dhe .js përdorin vetëm titull me germa të vogla, psh. {{ns:user}}:Foo/vector.css për dallim prej {{ns:user}}:Foo/Vector.css.",
        "updated": "(E ndryshueme)",
        "note": "'''Shenim:'''",
index 355987d..79ccd59 100644 (file)
        "recentchangeslinked-summary": "هذه قائمة بالتغييرات التي تمت حديثا للصفحات الموصولة من صفحة معينة (أو إلى الأعضاء ضمن تصنيف معين).\nالصفحات في [[Special:Watchlist|قائمة مراقبتك]] '''مغلظة'''",
        "recentchangeslinked-page": "اسم الصفحة:",
        "recentchangeslinked-to": "أظهر التغييرات للصفحات الموصولة للصفحة المعطاة عوضا عن ذلك",
+       "recentchanges-page-added-to-category": "[[:$1]] أضيفت إلى التصنيف",
        "upload": "ارفع ملفا",
        "uploadbtn": "ارفع الملف",
        "reuploaddesc": "إلغاء الرفع والرجوع إلى استمارة الرفع",
        "upload-dialog-button-done": "تم",
        "upload-dialog-button-save": "احفظ",
        "upload-dialog-button-upload": "رفع",
-       "upload-process-error": "حدث خطأ",
-       "upload-process-warning": "حدث تنبيه",
        "upload-form-label-select-file": "اختر ملفا",
        "upload-form-label-infoform-title": "التفاصيل",
        "upload-form-label-infoform-name": "الاسم",
index e2ee451..cb750de 100644 (file)
        "upload-dialog-button-done": "কৰা হ’ল",
        "upload-dialog-button-save": "সাঁচি থওক",
        "upload-dialog-button-upload": "আপল'ড",
-       "upload-process-error": "এটা ত্ৰুটি পোৱা গৈছে",
-       "upload-process-warning": "এটা সতৰ্কবাণী পোৱা গৈছে",
        "upload-form-label-select-file": "ফাইল নিৰ্বাচন কৰক",
        "upload-form-label-infoform-title": "বিস্তাৰিত",
        "upload-form-label-infoform-name": "নাম",
index b2dc32c..cdc239c 100644 (file)
        "upload-dialog-button-done": "Fecho",
        "upload-dialog-button-save": "Guardar",
        "upload-dialog-button-upload": "Xubir",
-       "upload-process-error": "Hebo un error",
-       "upload-process-warning": "Hebo un avisu",
        "upload-form-label-select-file": "Seleiciona un ficheru",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nome",
index 684923a..5b37a8f 100644 (file)
        "prefs-help-recentchangescount": "Гэта датычыцца апошніх зьменах, гісторый старонак і журналаў.",
        "prefs-help-watchlist-token2": "Гэта сакрэтны ключ да стужкі вашага сьпісу назіраньня.\nКожны, хто ведае яго, можа набыць доступ да вашага сьпісу назіраньня, таму не дзяліцеся ім.\n[[Special:ResetTokens|Пстрыкніце тут, калі вам трэба скінуць яго]].",
        "savedprefs": "Вашыя налады былі захаваныя.",
+       "savedrights": "Правы {{GENDER:$1|ўдзельніка|ўдзельніцы}} $1 былі захаваныя.",
        "timezonelegend": "Часавы пояс:",
        "localtime": "Мясцовы час:",
        "timezoneuseserverdefault": "Выкарыстоўваць стандартныя налады {{GRAMMAR:родны|{{SITENAME}}}} ($1)",
        "upload-options": "Налады загрузкі",
        "watchthisupload": "Назіраць за гэтым файлам",
        "filewasdeleted": "Файл з такой назвай загружаўся, але быў выдалены.\nВам трэба праверыць $1 перад новай загрузкай.",
+       "filename-thumb-name": "Гэта выглядае як назва мініятуры. Калі ласка, не загружайце мініятуры назад у тую ж вікі. Калі вам неабходны гэты файл, выпраўце назву на больш зразумелую, каб яна ня ўтрымлівала прэфікс мініятуры.",
        "filename-bad-prefix": "Назва файла, які Вы загружаеце, пачынаецца з '''«$1»'''. Падобныя бессэнсоўныя назвы звычайна ствараюцца аўтаматычна лічбавымі фотаапаратамі. Калі ласка, абярыце больш зразумелую назву для Вашага файла.",
        "upload-success-subj": "Загрузка пасьпяхова скончылася",
        "upload-success-msg": "Вашая загрузка з [$2] была пасьпяховая. Яна даступная тут: [[:{{ns:file}}:$1]]",
        "upload-dialog-button-done": "Зроблена",
        "upload-dialog-button-save": "Захаваць",
        "upload-dialog-button-upload": "Загрузіць",
-       "upload-process-error": "Адбылася памылка",
-       "upload-process-warning": "Зьявілася папярэджаньне",
        "upload-form-label-select-file": "Абраць файл",
        "upload-form-label-infoform-title": "Падрабязнасьці",
        "upload-form-label-infoform-name": "Назва",
        "upload-form-label-infoform-description": "Апісаньне",
        "upload-form-label-usage-title": "Выкарыстаньне",
        "upload-form-label-usage-filename": "Назва файлу",
+       "foreign-structured-upload-form-label-own-work": "Гэта мая ўласная праца",
        "backend-fail-stream": "Немагчыма накіраваць файл $1.",
        "backend-fail-backup": "Немагчыма зрабіць рэзэрвовую копію файла $1.",
        "backend-fail-notexists": "Файл $1 не існуе.",
index b43070d..92d2a03 100644 (file)
        "upload-dialog-button-done": "اجراء",
        "upload-dialog-button-save": "ساتیتێن",
        "upload-dialog-button-upload": "بُرز کورتین",
-       "upload-process-error": "یک خطای رخ دات",
-       "upload-process-warning": "یک اخطاری رخ دات",
        "upload-form-label-select-file": "فایلئ نشاني کورتین",
        "upload-form-label-infoform-title": "پاک کورتین (شه بین بورتین)",
        "upload-form-label-infoform-name": "نام",
index d4a8520..75746dc 100644 (file)
        "upload-dialog-button-done": "সম্পন্ন",
        "upload-dialog-button-save": "সংরক্ষণ",
        "upload-dialog-button-upload": "আপলোড",
-       "upload-process-error": "একটি ত্রুটি দেখা দিয়েছে",
-       "upload-process-warning": "একটি সতর্কবার্তা দেখা দিয়েছে",
        "upload-form-label-select-file": "ফাইল নির্বাচন করুন",
        "upload-form-label-infoform-title": "বিস্তারিত",
        "upload-form-label-infoform-name": "নাম",
index 2b99a6b..24891c8 100644 (file)
        "upload-dialog-button-done": "Fet",
        "upload-dialog-button-save": "Desa",
        "upload-dialog-button-upload": "Carrega",
-       "upload-process-error": "S’ha produït un error",
-       "upload-process-warning": "S'ha produït un avís",
        "upload-form-label-select-file": "Seleccioneu fitxer",
        "upload-form-label-infoform-title": "Detalls",
        "upload-form-label-infoform-name": "Nom",
index bf21f22..24499a9 100644 (file)
        "prefs-help-recentchangescount": "Týká se posledních změn, historie stránek a protokolovacích záznamů.",
        "prefs-help-watchlist-token2": "Toto je tajný klíč k webovému kanálu vašich sledovaných stránek. Kdokoli, kdo bude tento klíč znát, bude moci váš seznam sledovaných stránek číst, takže ho nešiřte.\n[[Special:ResetTokens|Kliknutím sem ho můžete reinicializovat.]]",
        "savedprefs": "Nastavení byla uložena.",
+       "savedrights": "Práva {{GENDER:$1|uživatele|uživatelky}} $1 byla uložena.",
        "timezonelegend": "Časové pásmo:",
        "localtime": "Místní čas:",
        "timezoneuseserverdefault": "Použít časové pásmo wiki ($1)",
        "recentchanges-page-added-to-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další zařazeny|$2 další zařazeny|$2 dalších zařazeno}} do kategorie",
        "recentchanges-page-removed-from-category": "Stránka [[:$1]] vyřazena z kategorie",
        "recentchanges-page-removed-from-category-bundled": "Stránka [[:$1]] a {{PLURAL:$2|jedna další vyřazeny|$2 další vyřazeny|$2 dalších vyřazeno}} z kategorie",
+       "autochange-username": "Automatická změna MediaWiki",
        "upload": "Načíst soubor",
        "uploadbtn": "Načíst soubor",
        "reuploaddesc": "Zrušit načítání a vrátit se do formuláře.",
        "upload-dialog-button-done": "Hotovo",
        "upload-dialog-button-save": "Uložit",
        "upload-dialog-button-upload": "Načíst",
-       "upload-process-error": "Došlo k chybě",
-       "upload-process-warning": "Objevilo se upozornění",
        "upload-form-label-select-file": "Výběr souboru",
        "upload-form-label-infoform-title": "Podrobnosti",
        "upload-form-label-infoform-name": "Název",
        "upload-form-label-infoform-description": "Popis",
        "upload-form-label-usage-title": "Použití",
        "upload-form-label-usage-filename": "Jméno souboru",
+       "foreign-structured-upload-form-label-own-work": "Je to mé vlastní dílo",
        "foreign-structured-upload-form-label-infoform-categories": "Kategorie",
        "foreign-structured-upload-form-label-infoform-date": "Datum",
+       "foreign-structured-upload-form-label-own-work-message-local": "Potvrzuji, že tento soubor načítám v souladu s podmínkami užití a licenčními pravidly na {{grammar:6sg|{{SITENAME}}}}.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "Pokud nemůžete tento soubor načíst v souladu s pravidly {{grammar:2sg|{{SITENAME}}}}, zavřete prosím tento dialog a zkuste jiný způsob.",
+       "foreign-structured-upload-form-label-own-work-message-default": "Chápu, že soubor načítám na sdílené úložiště. Potvrzuji, že tak činím v souladu s tamními podmínkami užití a licenčními pravidly.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Pokud nemůžete tento soubor načíst v souladu s pravidly sdíleného úložiště, zavřete prosím tento dialog a zkuste jiný způsob.",
+       "foreign-structured-upload-form-label-own-work-message-shared": "Potvrzuji, že jsem držitelem autorských práv k tomuto souboru a neodvolatelně souhlasím s jeho zveřejněním na Wikimedia Commons pod licencí [https://creativecommons.org/licenses/by-sa/4.0/deed.cs Creative Commons Uveďte původ – Zachovejte licenci 4.0] a souhlasím s [https://wikimediafoundation.org/wiki/Terms_of_Use/cs Podmínkami užití].",
+       "foreign-structured-upload-form-label-not-own-work-message-shared": "Pokud nejste držiteli autorských práv k tomuto souboru nebo si ho přejete zveřejnit pod jinou licencí, zvažte použití [https://commons.wikimedia.org/wiki/Special:UploadWizard Průvodce načítáním souborů na Commons].",
        "backend-fail-stream": "Soubor $1 nelze streamovat.",
        "backend-fail-backup": "Soubor $1 nelze zazálohovat.",
        "backend-fail-notexists": "Soubor $1 neexistuje.",
        "svg-long-error": "Neplatný soubor SVG: $1",
        "show-big-image": "Původní soubor",
        "show-big-image-preview": "Velikost tohoto náhledu: $1.",
+       "show-big-image-preview-differ": "Velikost tohoto $3 náhledu tohoto $2 souboru: $1.",
        "show-big-image-other": "{{PLURAL:$2|Jiné|Jiná}} rozlišení: $1.",
        "show-big-image-size": "$1 × $2 pixelů",
        "file-info-gif-looped": "ve smyčce",
        "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
        "mw-widgets-titleinput-description-new-page": "stránka zatím neexistuje",
        "mw-widgets-titleinput-description-redirect": "přesměrování na $1",
-       "api-error-blacklisted": "Zvolte jiný, popisný název."
+       "api-error-blacklisted": "Zvolte prosím jiný, popisný název."
 }
index 447c18c..f8d3a0a 100644 (file)
        "changed": "улăштарнă",
        "deletepage": "Кăларса парахнă статьясем",
        "confirm": "Çирĕплетни",
-       "excontent": "ăшлăхĕ: «$1»",
-       "excontentauthor": "ăшлăхĕ: «$1» ([[Special:Contributions/$2|$2]] пĕччен кăна улшăнусем кĕртнĕ)",
+       "excontent": "ăшĕнче пулнă: \"$1\"",
+       "excontentauthor": "ăшĕнче пулнă: \"$1\", пĕртен пĕр хушакан пулнă \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|talk]])",
        "actioncomplete": "Турăмăр",
        "deletedtext": "«$1» кăларса парахрăмăр.\nЮлашки кăларса пăрахнă статьясен списокне курмашкăн кунта пăхăр: $2.",
        "dellogpage": "Кăларса пăрахнисем",
index dbf1979..8afd623 100644 (file)
        "prefs-help-recentchangescount": "Dies umfasst die Liste der letzten Änderungen, die Versionsgeschichte und die Logbücher.",
        "prefs-help-watchlist-token2": "Dies ist der geheime Schlüssel zum Webfeed deiner Beobachtungsliste.\nJeder, der ihn kennt, kann deine Beobachtungsliste lesen. Teile ihn deshalb nicht Anderen mit.\nSofern notwendig, [[Special:ResetTokens|kannst du ihn zurücksetzen]].",
        "savedprefs": "Deine Einstellungen wurden gespeichert.",
+       "savedrights": "Die Benutzerrechte von {{GENDER:$1|$1}} wurden gespeichert.",
        "timezonelegend": "Zeitzone:",
        "localtime": "Ortszeit:",
        "timezoneuseserverdefault": "Standardzeit dieses Wikis nutzen ($1)",
        "upload-dialog-button-done": "Schließen",
        "upload-dialog-button-save": "Speichern",
        "upload-dialog-button-upload": "Hochladen",
-       "upload-process-error": "Es ist ein Fehler aufgetreten",
-       "upload-process-warning": "Es ist eine Warnung aufgetreten",
        "upload-form-label-select-file": "Datei auswählen",
        "upload-form-label-infoform-title": "Einzelheiten",
        "upload-form-label-infoform-name": "Name",
index ef3c1e3..d8efcde 100644 (file)
        "upload-dialog-button-done": "Ολοκληρώθηκε",
        "upload-dialog-button-save": "Αποθήκευση",
        "upload-dialog-button-upload": "Ανέβασμα",
-       "upload-process-error": "Ένα σφάλμα συνέβη",
-       "upload-process-warning": "Προέκυψε μία προειδοποίηση",
        "upload-form-label-select-file": "Επιλογή αρχείου",
        "upload-form-label-infoform-title": "Λεπτομέρειες",
        "upload-form-label-infoform-name": "Όνομα",
index 3845370..8f4ef96 100644 (file)
        "prefs-help-recentchangescount": "This includes recent changes, page histories, and logs.",
        "prefs-help-watchlist-token2": "This is the secret key to the web feed of your watchlist.\nAnyone who knows it will be able to read your watchlist, so do not share it.\nIf you need to, [[Special:ResetTokens|you can reset it]].",
        "savedprefs": "Your preferences have been saved.",
+       "savedrights": "The user rights of {{GENDER:$1|$1}} have been saved.",
        "timezonelegend": "Time zone:",
        "localtime": "Local time:",
        "timezoneuseserverdefault": "Use wiki default ($1)",
index e71cd2f..e5343a6 100644 (file)
        "prefs-help-recentchangescount": "Esto incluye cambios recientes, historiales de páginas y registros.",
        "prefs-help-watchlist-token2": "Esta es la clave secreta del canal de suscripción de tu lista de seguimiento.\nCualquier persona que la conozca podría leer tu lista, así que no la compartas.\n[[Special:ResetTokens|Pulsa aquí si necesitas restablecerla]].",
        "savedprefs": "Se han guardado tus preferencias.",
+       "savedrights": "Se han guardado los permisos de {{GENDER:$1|$1}}.",
        "timezonelegend": "Huso horario:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar la hora del servidor ($1)",
        "upload-dialog-button-done": "Hecho",
        "upload-dialog-button-save": "Guardar",
        "upload-dialog-button-upload": "Subir",
-       "upload-process-error": "Ha ocurrido un error",
-       "upload-process-warning": "Ha ocurrido una advertencia",
        "upload-form-label-select-file": "Seleccionar archivo",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nombre",
index 8216c8a..1f2a107 100644 (file)
        "upload-dialog-button-done": "Valmis",
        "upload-dialog-button-save": "Salvesta",
        "upload-dialog-button-upload": "Laadi üles",
-       "upload-process-error": "Esines tõrge",
-       "upload-process-warning": "Esines hoiatus",
        "upload-form-label-select-file": "Vali fail",
        "upload-form-label-infoform-title": "Üksikasjad",
        "upload-form-label-infoform-name": "Pealkiri",
index 1eca2bb..630bea2 100644 (file)
        "upload-dialog-button-done": "Egina",
        "upload-dialog-button-save": "Gorde",
        "upload-dialog-button-upload": "Igo",
-       "upload-process-error": "Errore bat gertatu da",
        "upload-form-label-select-file": "Fitxategia Aukeratu",
        "upload-form-label-infoform-title": "Xehetasunak",
        "upload-form-label-infoform-name": "Izena",
index 8c39588..f3701af 100644 (file)
        "upload-dialog-button-done": "انجام شد",
        "upload-dialog-button-save": "ذخیره",
        "upload-dialog-button-upload": "بارگذاری",
-       "upload-process-error": "يک خطا اتفاق افتاد",
-       "upload-process-warning": "یک هشدار رخ‌داد",
        "upload-form-label-select-file": "یک فایل انتخاب کنید",
        "upload-form-label-infoform-title": "جزئیات",
        "upload-form-label-infoform-name": "نام",
index 6322387..c0233f2 100644 (file)
        "upload-dialog-button-done": "Valmis",
        "upload-dialog-button-save": "Tallenna",
        "upload-dialog-button-upload": "Tallenna",
-       "upload-process-error": "Tapahtui virhe",
-       "upload-process-warning": "Sisältää varoituksen",
        "upload-form-label-select-file": "Valitse tiedosto",
        "upload-form-label-infoform-title": "Yksityiskohdat",
        "upload-form-label-infoform-name": "Nimi",
index d00a80b..5fe2ea2 100644 (file)
        "prefs-help-recentchangescount": "Ceci inclut les modifications récentes, les pages d'historiques et les journaux.",
        "prefs-help-watchlist-token2": "Voici la clé secrète du flux Web de votre liste de suivi.\nToute personne la connaissant pourra lire votre liste de suivi, ne la communiquez donc pas.\n[[Special:ResetTokens|Cliquez ici si vous devez la réinitialiser]].",
        "savedprefs": "Les préférences ont été sauvegardées.",
+       "savedrights": "Les droits utilisateur de {{GENDER:$1|$1}} ont été enregistrés.",
        "timezonelegend": "Fuseau horaire :",
        "localtime": "Heure locale :",
        "timezoneuseserverdefault": "Utiliser la valeur par défaut du wiki ($1)",
        "upload-dialog-button-done": "Fait",
        "upload-dialog-button-save": "Enregistrer",
        "upload-dialog-button-upload": "Téléverser",
-       "upload-process-error": "Une erreur est survenue",
-       "upload-process-warning": "Un avertissement s’est produit",
        "upload-form-label-select-file": "Sélectionner un fichier",
        "upload-form-label-infoform-title": "Détails",
        "upload-form-label-infoform-name": "Nom",
index ae63bc4..411ed1a 100644 (file)
        "prefs-help-recentchangescount": "Isto inclúe os cambios recentes, os historiais e mais os rexistros.",
        "prefs-help-watchlist-token2": "Esta é a clave secreta da fonte de novas web para a súa lista de vixilancia.\nCalquera persoa que a saiba poderá ler a súa lista de vixilancia; non comparta esta clave.\n[[Special:ResetTokens|Prema aquí se necesita restablecela]].",
        "savedprefs": "Gardáronse as súas preferencias.",
+       "savedrights": "Gardáronse os permisos de {{GENDER:$1|$1}}.",
        "timezonelegend": "Fuso horario:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar a hora do servidor por defecto ($1)",
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Gardar",
        "upload-dialog-button-upload": "Subir",
-       "upload-process-error": "Houbo un erro",
-       "upload-process-warning": "Produciuse unha advertencia",
        "upload-form-label-select-file": "Seleccionar un ficheiro",
        "upload-form-label-infoform-title": "Detalles",
        "upload-form-label-infoform-name": "Nome",
        "svg-long-error": "Ficheiro SVG non válido: $1",
        "show-big-image": "Ficheiro orixinal",
        "show-big-image-preview": "Tamaño desta vista previa: $1.",
+       "show-big-image-preview-differ": "Tamaño desta revisión $3 do ficheiro $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Outra resolución|Outras resolucións}}: $1.",
        "show-big-image-size": "$1 × $2 píxeles",
        "file-info-gif-looped": "en bucle",
index b38176e..b30c69e 100644 (file)
        "statistics-files": "Upload kel'le faili",
        "brokenredirects-edit": "bodol",
        "brokenredirects-delete": "Kadun udoi",
-       "nbytes": "$1 {{PLURAL:$1|byte|bytesi}}",
+       "nbytes": "$1 {{PLURAL:$1|byte|byti}}",
        "nmembers": "$1 {{PLURAL:$1|vangddi}}",
        "prefixindex": "Panam jenche nanvache survatek asa...",
        "shortpages": "Dhaktim panam",
index a019dba..bf5e352 100644 (file)
        "upload-dialog-button-done": "Fertig",
        "upload-dialog-button-save": "Spychere",
        "upload-dialog-button-upload": "Ufelade",
-       "upload-process-error": "Es het e Fähler ’gä",
-       "upload-process-warning": "Es het e Warnig ’gä",
        "upload-form-label-select-file": "Datei ussueche",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Name",
index 366e73c..d231dee 100644 (file)
        "prefs-help-recentchangescount": "כולל דף השינויים האחרונים, דפי היסטוריית גרסאות ויומנים.",
        "prefs-help-watchlist-token2": "זהו המפתח הסודי של ההזנה של רשימת המעקב שלך.\nכל מי שיודע אותו יוכל לקרוא את רשימת המעקב שלך, לכן אין לשתף אותו.\n[[Special:ResetTokens|אם יש בכך צורך, אפשר לאפס אותו כאן]].",
        "savedprefs": "ההעדפות שלך נשמרו.",
+       "savedrights": "הרשאות {{GENDER:$1|המשתמש|המשתמשת}} של $1 נשמרו.",
        "timezonelegend": "אזור זמן:",
        "localtime": "זמן מקומי:",
        "timezoneuseserverdefault": "ברירת המחדל של האתר ($1)",
        "upload-dialog-button-done": "בוצע",
        "upload-dialog-button-save": "שמירה",
        "upload-dialog-button-upload": "העלאה",
-       "upload-process-error": "אירעה שגיאה",
-       "upload-process-warning": "אירעה אזהרה",
        "upload-form-label-select-file": "בחירת קובץ",
        "upload-form-label-infoform-title": "פרטים",
        "upload-form-label-infoform-name": "שם",
        "mw-widgets-dateinput-no-date": "לא נבחר תאריך",
        "mw-widgets-titleinput-description-new-page": "הדף עדיין לא קיים",
        "mw-widgets-titleinput-description-redirect": "הפניה ל{{GRAMMAR:תחילית|$1}}",
-       "api-error-blacklisted": "× ×\90 ×\9c×\91×\97×\95ר ×\9b×\95תרת ×©×\95× ×\94, ×\9eת×\90רת ×\99×\95תר."
+       "api-error-blacklisted": "× ×\90 ×\9c×\91×\97×\95ר ×\9b×\95תרת ×\90×\97רת, ×\94×\9eת×\90רת ×\98×\95×\91 ×\99×\95תר ×\90ת ×\94ת×\95×\9b×\9f."
 }
index 2f376de..a00d316 100644 (file)
@@ -66,7 +66,8 @@
                        "राम प्रसाद जोशी",
                        "ShrUtiable",
                        "Matma Rex",
-                       "Angpradesh"
+                       "Angpradesh",
+                       "Sfic"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "createacct-captcha": "सुरक्षा जाँच",
        "createacct-imgcaptcha-ph": "उपरोक्त पाठ लिखें",
        "createacct-submit": "अपना खाता बनाएँ",
-       "createacct-another-submit": "à¤\8fà¤\95 à¤\85नà¥\8dय à¤\96ाता à¤\96à¥\8bलà¥\87à¤\82",
+       "createacct-another-submit": "à¤\96ाता à¤¬à¤¨à¤¾à¤\8fà¤\81",
        "createacct-benefit-heading": "{{SITENAME}} आपके जैसे लोगों द्वारा बनायी गई है।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन}}",
        "createacct-benefit-body2": "{{PLURAL:$1|पृष्ठ}}",
index 5f52a54..45aab5d 100644 (file)
        "upload-dialog-button-done": "Facite",
        "upload-dialog-button-save": "Salveguardar",
        "upload-dialog-button-upload": "Incargar",
-       "upload-process-error": "Un error ha occurrite",
-       "upload-process-warning": "Un advertimento se ha producite",
        "upload-form-label-select-file": "Seliger file",
        "upload-form-label-infoform-title": "Detalios",
        "upload-form-label-infoform-name": "Nomine",
index 5d1fd88..68b8cd6 100644 (file)
        "upload-dialog-button-done": "Nalpasen",
        "upload-dialog-button-save": "Idulin",
        "upload-dialog-button-upload": "Agikarga",
-       "upload-process-error": "Adda napasamak a biddut",
-       "upload-process-warning": "Adda napasamak a ballaag",
        "upload-form-label-select-file": "Pilien ti papeles",
        "upload-form-label-infoform-title": "Dagiti salaysay",
        "upload-form-label-infoform-name": "Nagan",
index b8deaf7..541534a 100644 (file)
        "prefs-help-recentchangescount": "Comprende ultime modifiche, cronologie e registri.",
        "prefs-help-watchlist-token2": "Questa è la chiave segreta per il feed web dei tuoi osservati speciali.\nChiunque la conosce sarà in grado di leggere i tuoi osservati speciali, per cui non condividerla. [[Special:ResetTokens|Clicca qui se hai bisogno di reimpostarla]].",
        "savedprefs": "Le preferenze sono state salvate.",
+       "savedrights": "I diritti utente di {{GENDER:$1|$1}} sono stati salvati.",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora locale:",
        "timezoneuseserverdefault": "Usa ora predefinita del wiki ($1)",
        "upload-dialog-button-done": "Fatto",
        "upload-dialog-button-save": "Salva",
        "upload-dialog-button-upload": "Carica",
-       "upload-process-error": "Si è verificato un errore",
-       "upload-process-warning": "Si è verificato un avviso",
        "upload-form-label-select-file": "Seleziona file",
        "upload-form-label-infoform-title": "Dettagli",
        "upload-form-label-infoform-name": "Nome",
        "pageinfo-category-pages": "Numero di pagine",
        "pageinfo-category-subcats": "Numero di sottocategorie",
        "pageinfo-category-files": "Numero di file",
-       "markaspatrolleddiff": "Segna la modifica come verificata",
+       "markaspatrolleddiff": "Segna come verificata",
        "markaspatrolledtext": "Segna questa pagina come verificata",
        "markedaspatrolled": "Modifica verificata",
        "markedaspatrolledtext": "La modifica di [[:$1]] selezionata è stata segnata come verificata.",
index 2368816..9a45d29 100644 (file)
        "upload-dialog-button-done": "完了",
        "upload-dialog-button-save": "保存",
        "upload-dialog-button-upload": "アップロード",
-       "upload-process-error": "エラーが発生しました",
-       "upload-process-warning": "警告",
        "upload-form-label-select-file": "ファイル選択",
        "upload-form-label-infoform-title": "詳細",
        "upload-form-label-infoform-name": "名前",
index 0b8abff..9c082b8 100644 (file)
        "recentchanges-label-minor": "Iki suntingan sithik",
        "recentchanges-label-bot": "Suntingan iki diayahi déning bot",
        "recentchanges-label-unpatrolled": "Suntingan iki durung dipatroli",
-       "recentchanges-label-plusminus": "Gedhene kaca wis diowahi segede niki.",
+       "recentchanges-label-plusminus": "Agengipun kaca sampun dipunowahi samekaten.",
        "recentchanges-legend-heading": "'''Katrangan:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (dhelengen uga: [[Special:NewPages|daftar kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
index 5c3199e..045e7d1 100644 (file)
        "upload-dialog-button-done": "შესრულდა",
        "upload-dialog-button-save": "შენახვა",
        "upload-dialog-button-upload": "ატვირთვა",
-       "upload-process-error": "მოხდა შეცდომა",
-       "upload-process-warning": "გაჩნდა გაფრთხილება",
        "upload-form-label-select-file": "ფაილის არჩევა",
        "upload-form-label-infoform-title": "დეტალები",
        "upload-form-label-infoform-name": "სახელი",
index 049cc74..e904f3b 100644 (file)
        "upload-dialog-button-done": "Бітті",
        "upload-dialog-button-save": "Сақтау",
        "upload-dialog-button-upload": "Жүктеу",
-       "upload-process-error": "Белгісіз қате кездесті",
-       "upload-process-warning": "Ескерту кездесті",
        "upload-form-label-select-file": "Файлды таңдау",
        "upload-form-label-infoform-title": "Егжей-тегжейі",
        "upload-form-label-infoform-name": "Атауы",
index 90338d8..214388c 100644 (file)
        "upload-dialog-button-done": "រួចរាល់",
        "upload-dialog-button-save": "រក្សាទុក",
        "upload-dialog-button-upload": "ផ្ទុកឡើង",
-       "upload-process-error": "មានបញ្ហាកើតឡើង",
-       "upload-process-warning": "មានការព្រមាន",
        "upload-form-label-select-file": "ជ្រើសរើសឯកសារ",
        "upload-form-label-infoform-title": "ព័ត៌មាន​លំអិត",
        "upload-form-label-infoform-name": "ឈ្មោះ​",
index 0bb2640..ced19da 100644 (file)
        "upload-dialog-button-done": "완료",
        "upload-dialog-button-save": "저장",
        "upload-dialog-button-upload": "올리기",
-       "upload-process-error": "오류가 발생했습니다",
-       "upload-process-warning": "경고가 일어났습니다",
        "upload-form-label-select-file": "파일을 선택해주세요.",
        "upload-form-label-infoform-title": "자세한 사항",
        "upload-form-label-infoform-name": "이름",
        "logentry-tag-update-add-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에 $6 {{PLURAL:$7|태그}}를 {{GENDER:$2|추가했습니다}}",
        "logentry-tag-update-remove-revision": "$1 사용자가 $3 문서의 $4판에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
        "logentry-tag-update-remove-logentry": "$1 사용자가 $3 문서의 기록 항목 $5에서 $8 {{PLURAL:$9|태그}}를 {{GENDER:$2|제거했습니다}}",
-       "logentry-tag-update-revision": "$1 사용자가 $3 문서의 $4 판에서 태그를 수정했습니다 ($6을(를) {{PLURAL:$7|추가함}}; $8을(를) {{PLURAL:$9|제거함}})",
+       "logentry-tag-update-revision": "$1 사용자가 $3 문서의 $4 판에서 태그를 {{GENDER:$2|수정했습니다}} ($6을(를) {{PLURAL:$7|추가함}}; $8을(를) {{PLURAL:$9|제거함}})",
        "rightsnone": "(없음)",
        "revdelete-summary": "편집 요약",
        "feedback-adding": "문서에 피드백을 올리는 중...",
index e24f877..e5bc1cd 100644 (file)
        "upload-dialog-button-done": "Jedonn",
        "upload-dialog-button-save": "Faßhalde",
        "upload-dialog-button-upload": "Lohß Jonn!",
-       "upload-process-error": "Ene Fähler es opjetrodde",
-       "upload-process-warning": "En Warnong wood ußjejovve.",
        "upload-form-label-select-file": "De ußjesöhk Dattei",
        "upload-form-label-infoform-title": "Eijnzelheijte",
        "upload-form-label-infoform-name": "Nahme",
index d0d98b4..05b6d26 100644 (file)
@@ -91,7 +91,7 @@
        "march-gen": "Março",
        "april-gen": "Abril",
        "may-gen": "Mayo",
-       "june-gen": "Juño",
+       "june-gen": "Junio",
        "july-gen": "Julio",
        "august-gen": "Agosto",
        "september-gen": "Setiembre",
        "passwordreset-email": "Adresso de letral:",
        "passwordreset-emailelement": "Usuario: \n$1\n\nKontrasenya temporal: \n$2",
        "changeemail": "Kambiar adreso de korreo elektroniko",
+       "changeemail-header": "Kambiar adreso de korreo elektroniko de kuento",
        "changeemail-oldemail": "Adreso de korreo elektroniko aktual:",
        "changeemail-newemail": "Muevo adreso de korreo elektroniko:",
        "changeemail-none": "(dinguno)",
        "lockedbyandtime": "(por {{GENDER:$1|$1}} el $2 a la $3)",
        "movepagetext": "Uzando el sigiente formulario va renombrar una pajina, kitando todo su istoria a su nuevo nombre.\nEl titulo orijinal se va convertir en una redireksyon al muevo titulo.\nPuede aktualizar otomatikamente las redireksyones al titulo orijinal.\nSi eskoje no azerlo, asegurate de verifikar ke no ay  [[Special:DoubleRedirects|redireksyones dobles]] o [[Special:BrokenRedirects|rotas]].\nTú sos responsable de asegurar ke los enlases funksyonan korrectamente.\n\nNota ke la pajina '''no''' va ser renombrada si ya egziste una hoja con esta muevo título, a no ser que sea una redireksyon sin istoria.\nEsto sinyifica que vas pueder renombrar una pajina a su titulo orijinal si hazes un yerro, ma que no vas pueder sobreskrivir una pajina que ya existe.\n\n'''Aviso!'''\nEste puede ser un trocamiento muy muy emportante e inesperado para una pajina popular;\nasegurate de entender las resultados del lo que azes antes de ir endelantre.",
        "movepagetalktext": "La hoja de diskussión associada, si egziste, va ser renombrada otomáticamente '''a menos que:'''\n*Esté renombrando la hoja entre espacios de nombres diferentes,\n*Una hoja de diskussión no vazía ya egziste con el nombre nuevo, o\n*Desactivara la opción \"Renombrar la hoja de diskussión también\".\n\nEn estos casos, va deber trasladar manualmente el contenido de la hoja de diskussión.",
-       "movearticle": "Renombra la hoja",
        "newtitle": "A título nuevo",
        "move-watch": "Cudiar este artículo",
        "movepagebtn": "Renombra la hoja",
        "hebrew-calendar-m8": "Iyyar",
        "hebrew-calendar-m9": "Siván",
        "hebrew-calendar-m10": "Tammuz",
-       "hebrew-calendar-m1-gen": "Tishre",
-       "hebrew-calendar-m2-gen": "Ḥeshvan",
+       "hebrew-calendar-m1-gen": "Tishri",
+       "hebrew-calendar-m2-gen": "Ḥeshván",
+       "hebrew-calendar-m4-gen": "Teveth",
+       "hebrew-calendar-m6-gen": "Adhar",
+       "hebrew-calendar-m6a-gen": "Adhar I",
+       "hebrew-calendar-m6b-gen": "Adhar II",
+       "hebrew-calendar-m7-gen": "Nissán",
+       "hebrew-calendar-m8-gen": "Iyyar",
+       "hebrew-calendar-m9-gen": "Siván",
+       "hebrew-calendar-m10-gen": "Tammuz",
        "duplicate-defaultsort": "'''Aviso:''' la klave primaria para ordenamiento \"$2\" anula la primera \"$1\"",
        "version": "Versión",
        "version-specialpages": "Pajinas espesiales",
index d07d95a..39a6e97 100644 (file)
        "upload-dialog-button-done": "Fäerdeg",
        "upload-dialog-button-save": "Späicheren",
        "upload-dialog-button-upload": "Eroplueden",
-       "upload-process-error": "Et ass e Feeler geschitt",
-       "upload-process-warning": "Eng Warnung gouf ausgeschwat",
        "upload-form-label-select-file": "Fichier eraussichen",
        "upload-form-label-infoform-title": "Detailer",
        "upload-form-label-infoform-name": "Numm",
index 67ff93b..b632308 100644 (file)
        "thu": "Ket",
        "fri": "Pen",
        "sat": "Šeš",
-       "january": "Sausis",
+       "january": "sausio",
        "february": "vasario",
        "march": "kovo",
-       "april": "Balandis",
+       "april": "balandžio",
        "may_long": "Gegužė",
-       "june": "Birželis",
-       "july": "Liepa",
-       "august": "Rugpjūtis",
+       "june": "birželio",
+       "july": "liepos",
+       "august": "rugpjūčio",
        "september": "rugsėjo",
-       "october": "Spalis",
-       "november": "Lapkritis",
+       "october": "spalio",
+       "november": "lapkričio",
        "december": "gruodžio",
        "january-gen": "Sausio",
        "february-gen": "Vasario",
        "passwordreset-emailerror-capture": "Priminimo elektroninis laiškas buvo sukurtas, toks, koks parodytas žemiau, bet pasiuntimas naudotojui buvo nesėkmingas: $1",
        "changeemail": "Pakeisti ar pašalinti el. pašto adresą",
        "changeemail-header": "Keisti paskyros el. pašto adresą",
+       "changeemail-passwordrequired": "Jums reikės įvesti savo slaptažodį, kad patvirtintumėte šį pakeitimą.",
        "changeemail-no-info": "Jūs turite būti prisijungęs, kad pasiektumėte puslapį tiesiogiai.",
        "changeemail-oldemail": "Dabartinis el. pašto adresas:",
        "changeemail-newemail": "Naujas el. pašto adresas:",
        "upload-dialog-button-done": "Atlikta",
        "upload-dialog-button-save": "Išsaugoti",
        "upload-dialog-button-upload": "Įkelti",
-       "upload-process-error": "Įvyko klaida",
-       "upload-process-warning": "Įvyko įspėjimas",
        "upload-form-label-select-file": "Pasirinkti failą",
        "upload-form-label-infoform-title": "Detalės",
        "upload-form-label-infoform-name": "Pavadinimas",
        "filerevert-legend": "Failo sugrąžinimas",
        "filerevert-intro": "<span class=\"plainlinks\">Jūs grąžinate '''[[Media:$1|$1]]''' į versiją $4 ($2, $3).</span>",
        "filerevert-comment": "Priežastis:",
-       "filerevert-defaultcomment": "Grąžinta į $1, $2 versiją",
+       "filerevert-defaultcomment": "Grąžinta į $1, $2 ($3) versiją",
        "filerevert-submit": "Grąžinti",
        "filerevert-success": "<span class=\"plainlinks\">'''[[Media:$1|$1]]''' buvo sugrąžintas į versiją $4 ($2, $3).</span>",
        "filerevert-badversion": "Nėra jokių ankstesnių vietinių šio failo versijų su pateiktu laiku.",
        "deletepage": "Trinti puslapį",
        "confirm": "Tvirtinu",
        "excontent": "buvęs turinys: „$1“",
-       "excontentauthor": "buvęs turinys: „$1“ (redagavo tik „[[Special:Contributions/$2|$2]]“)",
+       "excontentauthor": "buvęs turinys: „$1“; redagavo tik „[[Special:Contributions/$2|$2]]“ ([[User talk:$2|aptarimas]])",
        "exbeforeblank": "prieš ištrinant turinys buvo: „$1“",
        "delete-confirm": "Ištrinti „$1“",
        "delete-legend": "Trynimas",
        "svg-long-error": "Neleistinas SVG failas: $1",
        "show-big-image": "Pradinė rinkmena",
        "show-big-image-preview": "Šios peržiūros dydis: $1.",
+       "show-big-image-preview-differ": "Rinkmenos $2 peržiūros $3 dydisː $1.",
        "show-big-image-other": "{{PLURAL:$2|Kita rezoliucija|Kitos $2 rezoliucijos|Kitų $2 rezoliucijų}}: $1.",
        "show-big-image-size": "$1 × $2 taškų",
        "file-info-gif-looped": "ciklinis",
        "api-error-badaccess-groups": "Jums neleidžiama įkelti failus į šią wiki.",
        "api-error-badtoken": "Vidinė klaida: blogai atpažinimo ženklas.",
        "api-error-copyuploaddisabled": "Siuntimas pagal URL yra išjungtas šiame serveryje.",
-       "api-error-duplicate": "Jau {{PLURAL:$1|yra kitas failas|yra kiti failai}} puslapyje su tuo pačiu turiniu..",
+       "api-error-duplicate": "Jau {{PLURAL:$1|yra kitas failas|yra kiti failai}} puslapyje su tuo pačiu turiniu.",
        "api-error-duplicate-archive": "Jau {{PLURAL:$1|buvo kitas failas|buvo kitų failų}} puslapyje su tuo pačiu turiniu, bet {{PLURAL:$1|buvo|buvo}} ištrinti.",
        "api-error-empty-file": "Pateikta failas buvo tuščias.",
        "api-error-emptypage": "Kurti naujus, tuščius puslapius neleidžiama.",
        "default-skin-not-found-no-skins": "Ups! Jūsų viki numatytoji išvaizdą, nurodyta <code>$wgDefaultSkin</code> <code>$1</code>, yra negalima.\n\nJūs neturite įdiegtų išvaizdų.\n\n; Jei ką tik įsidiegėte MediaWiki:\n: Jūs tikriausiai įsidiegėte iš git arba tiesiai iš kodo naudodami kitą metodą. To buvo tikimasi. Pabandykite įsidiegti išvaizdų iš [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org išvaizdų katalogo] taip:\n:* Parsisiųsdami  [https://www.mediawiki.org/wiki/Download tvarkyklę], kuri turi kelias išvaizdas ir plėtinius. Jūs galite nukopijuoti ir įklijuoti <code>skins/</code> katalogą iš jos.\n:* Persiųsdami individualias išvaizdas iš [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org].\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Naudodami Git išvaizdų parsisiuntimui].\n: Tai neturėtų trukdyti Jūsų git saugyklai jei Jūs esate MediaWiki kūrėjas. Žiūrėkite [https://www.mediawiki.org/wiki/Manual:Skin_configuration Instrukcija: Išvaizdos konfigūracija] dėl informacijos kaip įgalinti išvaizdas ir pasirinkti numatytąją.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (įgalinta)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 ('''išjungtas''')",
-       "mediastatistics": "Medios statistika",
+       "mediastatistics": "Daugialypės terpės statistika",
        "mediastatistics-summary": "Statistika apie įkeltus failo tipus. Tai apima tik naujausias failo versijas. Senos ar ištrintos failų versijos nėra įtrauktos.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bitas|$1 bitai}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME tipas",
index 002e571..bf9f680 100644 (file)
        "prefs-help-recentchangescount": "Подразбира скорешни промени, истории на страници и дневници.",
        "prefs-help-watchlist-token2": "Ова е тајна шифра за вашиот канализиран список на набљудувања.\nСекој што ја знае ќе може да ја чита, па затоа ви препорачуваме да не ја кажувате никому.\n[[Special:ResetTokens|Стиснете тука ако треба да зададете нова]].",
        "savedprefs": "Вашите нагодувања се зачувани.",
+       "savedrights": "Корисничките права на {{GENDER:$1|$1}} не се зачувани.",
        "timezonelegend": "Часовен појас:",
        "localtime": "Месно време:",
        "timezoneuseserverdefault": "Од викито ($1)",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зачувај",
        "upload-dialog-button-upload": "Подигни",
-       "upload-process-error": "Се појави грешка",
-       "upload-process-warning": "Се јави предупредување",
        "upload-form-label-select-file": "Одберете податотека",
        "upload-form-label-infoform-title": "Подробно",
        "upload-form-label-infoform-name": "Назив",
index 75bfcde..0c117a5 100644 (file)
        "viewsource": "മൂലരൂപം കാണുക",
        "viewsource-title": "$1 എന്ന താളിന്റെ മൂലരൂപം കാണുക",
        "actionthrottled": "പ്രവൃത്തി നടത്തിയിരിക്കുന്നു",
-       "actionthrottledtext": "പാഴàµ\86à´´àµ\81ത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.",
+       "actionthrottledtext": "à´¦àµ\81à´°àµ\81പയàµ\8bà´\97ത്തിനെതിരെയുള്ള മുൻകരുതൽ എന്ന നിലയിൽ ഒരേ പ്രവൃത്തി കുറഞ്ഞ സമയത്തിനുള്ളിൽ നിരവധി തവണ ആവർത്തിക്കുന്നതു പരിമിതപ്പെടുത്തിയിരിക്കുന്നു. താങ്കൾ ആ പരിധി ലംഘിച്ചിരിക്കുന്നു. കുറച്ച് മിനിറ്റുകൾക്കു ശേഷം വീണ്ടും ശ്രമിക്കുക.",
        "protectedpagetext": "ഈ താൾ തിരുത്തോ മറ്റു പ്രവൃത്തികളോ തടയാനാകും വിധം സംരക്ഷിക്കപ്പെട്ടിട്ടുള്ളതാണ്.",
        "viewsourcetext": "താങ്കൾക്ക് ഈ താളിന്റെ മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
        "viewyourtext": "താങ്കൾക്ക് ഈ താളിലെ <strong>താങ്കളുടെ തിരുത്തുകളുടെ</strong> മൂലരൂപം കാണാനും പകർത്താനും സാധിക്കും.",
        "passwordreset-emailsent-capture": "രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ അയച്ചിട്ടുണ്ട്, അത് താഴെക്കൊടുക്കുന്നു.",
        "passwordreset-emailerror-capture": "താഴെക്കൊടുത്തിരിക്കുന്ന, രഹസ്യവാക്ക് പുനർസജ്ജീകരണ ഇമെയിൽ സൃഷ്ടിക്കാനായെങ്കിലും, അത് {{GENDER:$2|ഉപയോക്താവിന്}} അയയ്ക്കുന്നത് പരാജയപ്പെട്ടു: $1",
        "changeemail": "ഇമെയിൽ വിലാസം മാറ്റുക അല്ലെങ്കിൽ നീക്കംചെയ്യുക",
-       "changeemail-header": "അംഗത്വത്തിന്റെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്തുക",
+       "changeemail-header": "താങ്കളുടെ ഇമെയിൽ വിലാസത്തിൽ മാറ്റംവരുത്താൻ ഈ ഫോം പൂരിപ്പിച്ചു നൽകുക.താങ്കളുടെ അംഗത്വവുമായി ഏതെങ്കിലുമൊരു ഇമെയിൽ വിലാസത്തിനുള്ള ബന്ധം ഒഴിവാക്കാൻ ഫോം പൂരിപ്പിക്കുമ്പോൾ പുതിയ ഇമെയിൽ വിലാസത്തിനുള്ള ഭാഗം ഒഴിച്ചിടുക.",
+       "changeemail-passwordrequired": "ഈ മാറ്റം സ്ഥിരീകരിക്കാൻ താങ്കളുടെ രഹസ്യവാക്ക് നൽകുക.",
        "changeemail-no-info": "ഈ താൾ നേരിട്ടു കാണുന്നതിന് താങ്കൾ ലോഗിൻ ചെയ്തിരിക്കണം.",
        "changeemail-oldemail": "ഇപ്പോഴത്തെ ഇമെയിൽ വിലാസം:",
        "changeemail-newemail": "പുതിയ ഇമെയിൽ വിലാസം:",
        "sig_tip": "തിരുത്തൽ സമയമടക്കമുള്ള താങ്കളുടെ ഒപ്പ്",
        "hr_tip": "തിരശ്ചീനരേഖ (മിതമായി മാത്രം ഉപയോഗിക്കുക)",
        "summary": "ചുരുക്കം:",
-       "subject": "വിഷയം/തലക്കെട്ട്:",
+       "subject": "വിഷയം:",
        "minoredit": "ഇതൊരു ചെറിയ തിരുത്താണ്",
        "watchthis": "ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "savearticle": "താൾ സേവ് ചെയ്യുക",
        "missingsummary": "'''ഓർമ്മക്കുറിപ്പ്:''' താങ്കൾ തിരുത്തലിന്റെ ചുരുക്കരൂപം നൽകിയിട്ടില്ല. ''സേവ് ചെയ്യുക'' ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ താങ്കൾ വരുത്തിയ മാറ്റം കാത്തുസൂക്ഷിക്കുന്നതാണ്.",
        "selfredirect": "<strong>മുന്നറിയിപ്പ്:</strong> ഈ താളിലേക്ക് തന്നെയുള്ള തിരിച്ചുവിടലാണ് താങ്കൾ സൃഷ്ടിക്കുന്നത്.\nതിരിച്ചുവിടലിനു താങ്കൾ നൽകിയ ലക്ഷ്യം തെറ്റിയിരിക്കാം അല്ലെങ്കിൽ താങ്കൾ തിരുത്തുന്നത് തെറ്റായ താൾ ആയിരിക്കാം.\nഎന്തായാലും, വീണ്ടും \"{{int:savearticle}}\" അമർത്തിയാൽ, തിരിച്ചുവിടൽ സൃഷ്ടിക്കപ്പെടുന്നതാണ്.",
        "missingcommenttext": "താങ്കളുടെ അഭിപ്രായം ദയവായി താഴെ രേഖപ്പെടുത്തുക.",
-       "missingcommentheader": "'''ഓർമ്മക്കുറിപ്പ്:''' ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
+       "missingcommentheader": "<strong>ഓർമ്മക്കുറിപ്പ്:</strong> ഈ കുറിപ്പിന് താങ്കൾ വിഷയം/തലക്കെട്ട് നൽകിയിട്ടില്ല. ''{{int:savearticle}}'' എന്ന ബട്ടൺ ഒരുവട്ടം കൂടി അമർത്തിയാൽ വിഷയം/തലക്കെട്ട് ഇല്ലാതെ തന്നെ കാത്തുസൂക്ഷിക്കുന്നതാവും.",
        "summary-preview": "ചുരുക്കരൂപം എങ്ങനെയുണ്ടെന്നു കാണുക:",
-       "subject-preview": "വിഷയം/തലക്കെട്ട് എങ്ങനെയുണ്ടെന്ന് കാണുക:",
+       "subject-preview": "വിഷയം എങ്ങനെയുണ്ടെന്ന് കാണുക:",
        "previewerrortext": "താങ്കളുടെ മാറ്റങ്ങൾ എങ്ങനെയുണ്ടെന്ന് കാണാൻ ശ്രമിച്ചപ്പോൾ പിഴവുണ്ടായി.",
        "blockedtitle": "ഉപയോക്താവിനെ തടഞ്ഞിരിക്കുന്നു",
        "blockedtext": "'''താങ്കളുടെ ഉപയോക്തൃനാമത്തേയോ താങ്കൾ ഇപ്പോൾ ലോഗിൻ ചെയ്തിട്ടുള്ള ഐ.പി. വിലാസത്തേയോ ഈ വിക്കി തിരുത്തുന്നതിൽ നിന്നു തടഞ്ഞിരിക്കുന്നു'''\n\n$1 ആണ് ഈ തടയൽ നടത്തിയത്. ''$2'' എന്നതാണു് അതിനു രേഖപ്പെടുത്തിയിട്ടുള്ള കാരണം.\n\n* തടയലിന്റെ തുടക്കം: $8\n* തടയലിന്റെ കാലാവധി: $6\n* തടയപ്പെട്ട ഉപയോക്താവ്: $7\n\nഈ തടയലിനെ പറ്റി ചർച്ച ചെയ്യാൻ താങ്കൾക്ക് $1 എന്ന ഉപയോക്താവിനേയോ മറ്റ് [[{{MediaWiki:Grouppage-sysop}}|കാര്യനിർവാഹകരെയോ]] സമീപിക്കാവുന്നതാണ്. [[Special:Preferences|താങ്കളുടെ ക്രമീകരണങ്ങളിൽ]] താങ്കൾ സാധുവായ ഇമെയിൽ വിലാസം കൊടുത്തിട്ടുണ്ടെങ്കിൽ, അതു അയക്കുന്നതിൽ നിന്നു താങ്കൾ തടയപ്പെട്ടിട്ടില്ലെങ്കിൽ, 'ഇദ്ദേഹത്തിന് ഇമെയിൽ അയക്കൂ' എന്ന സം‌വിധാനം ഉപയോഗിച്ച് താങ്കൾക്ക് മറ്റുപയോക്താക്കളുമായി ബന്ധപ്പെടാം. താങ്കളുടെ നിലവിലുള്ള ഐ.പി. വിലാസം $3 ഉം, താങ്കളുടെ തടയൽ ഐ.ഡി. #$5 ഉം ആണ്. ഇവ രണ്ടും താങ്കൾ കാര്യനിർവാഹകനെ ബന്ധപ്പെടുമ്പോൾ ചേർക്കുക.",
        "prefs-help-recentchangescount": "പുതിയ മാറ്റങ്ങൾ, താളിന്റെ നാൾവഴികൾ, രേഖകൾ എന്നിവക്കും ഇത് ബാധകമാണ്.",
        "prefs-help-watchlist-token2": "ഇത് താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ  പട്ടികയുടെ വെബ്‌ഫീഡിനുള്ള രഹസ്യചാവിയാണ്.\nഇത് അറിയാവുന്നവർക്ക് താങ്കൾ ശ്രദ്ധിക്കുന്നവയെന്താണെന്ന് വായിക്കാനാവുമെന്നതിനാൽ, പങ്ക് വെയ്ക്കാതിരിക്കുക.\n[[Special:ResetTokens|ഇത് പുനസജ്ജീകരിക്കണമെങ്കിൽ ഇവിടെ ഞെക്കുക]].",
        "savedprefs": "താങ്കളുടെ ക്രമീകരണങ്ങൾ കാത്തുസൂക്ഷിച്ചിരിക്കുന്നു.",
+       "savedrights": "{{GENDER:$1|$1}} എന്ന ഉപയോക്താവിന്റെ ഉപയോക്തൃ അവകാശങ്ങൾ സേവ് ചെയ്തിരിക്കുന്നു.",
        "timezonelegend": "സമയ മേഖല:",
        "localtime": "പ്രാദേശിക സമയം:",
        "timezoneuseserverdefault": "വിക്കിയിൽ സ്വതേയുള്ളത് ഉപയോഗിക്കുക ($1)",
        "upload-options": "അപ്‌‌ലോഡ് ഐച്ഛികങ്ങൾ",
        "watchthisupload": "ഈ പ്രമാണം ശ്രദ്ധിക്കുക",
        "filewasdeleted": "ഈ പേരിലുള്ള ഒരു പ്രമാണം ഇതിനു മുൻപ് അപ്‌ലോഡ് ചെയ്യുകയും പിന്നീട് മായ്ക്കുകയും ചെയ്തിട്ടുള്ളതാണ്‌. ഈ പ്രമാണം തുടർന്നും അപ്‌ലോഡ് ചെയ്യുന്നതിനു മുൻപ് $1 പരിശോധിക്കേണ്ടതാണ്‌.",
+       "filename-thumb-name": "ഇത് കണ്ടിട്ട് ലഘുചിത്രത്തിന്റെ തലക്കെട്ട് പോലെയുണ്ട്. ദയവായി ഇതേ വിക്കിയിലെ ചിത്രങ്ങളുടെ ലഘുചിത്രം തന്നെ അപ്‌ലോഡ് ചെയ്യരുത്. അങ്ങനെയല്ലെങ്കിൽ, ലഘുചിത്രമെന്ന പൂർവ്വപദഭാഗമില്ലാതെ, കൂടുതൽ അർത്ഥപൂർണ്ണമായ പേര് നൽകുക.",
        "filename-bad-prefix": "താങ്കൾ അപ്‌ലോഡ് ചെയ്യുവാൻ ശ്രമിക്കുന്ന പ്രമാണത്തിന്റെ പേര്‌ '''\"$1\"''' എന്നാണ്‌ തുടങ്ങുന്നത്. ഇതു ഡിജിറ്റൽ ക്യാമറയിൽ പടങ്ങൾക്കു യാന്ത്രികമായി ചേർക്കുന്ന പേരാണ്‌. ദയവു ചെയ്തു താങ്കൾ അപ്‌ലോഡ് ചെയ്യുന്ന പ്രമാണത്തെ വിശദീകരിക്കുന്ന അനുയോജ്യമായ ഒരു പേരു തിരഞ്ഞെടുക്കുക.",
        "upload-success-subj": "അപ്‌ലോഡ് വിജയിച്ചിരിക്കുന്നു",
        "upload-success-msg": "താങ്കളുടെ [$2]-ൽ നിന്നും വിജയകരമായി അപ്‌ലോഡ് ചെയ്തിരിക്കുന്നു. [[:{{ns:file}}:$1]] കാണുക",
        "upload-dialog-button-done": "ചെയ്തു കഴിഞ്ഞു",
        "upload-dialog-button-save": "സേവ് ചെയ്യുക",
        "upload-dialog-button-upload": "അപ്‌‌ലോഡ്",
-       "upload-process-error": "ഒരു പിഴവുണ്ടായി",
-       "upload-process-warning": "ഒരു മുന്നറിയിപ്പുണ്ടായി",
        "upload-form-label-select-file": "പ്രമാണം തിരഞ്ഞെടുക്കുക",
        "upload-form-label-infoform-title": "വിശദാംശങ്ങൾ",
        "upload-form-label-infoform-name": "പേര്‌",
        "foreign-structured-upload-form-label-own-work": "ഇതെന്റെ സ്വന്തം സൃഷ്ടി ആണ്",
        "foreign-structured-upload-form-label-infoform-categories": "വർഗ്ഗങ്ങൾ",
        "foreign-structured-upload-form-label-infoform-date": "തീയതി",
+       "foreign-structured-upload-form-label-own-work-message-local": "{{SITENAME}} സംരംഭത്തിലെ സേവന നിബന്ധനകൾക്കും ഉപയോഗാനുമതി നയങ്ങൾക്കും അനുസരിച്ചാണ് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യുന്നതെന്ന് ഞാൻ സ്ഥിരീകരിക്കുന്നു.",
+       "foreign-structured-upload-form-label-not-own-work-message-local": "{{SITENAME}} സംരംഭത്തിലെ നയങ്ങളനുസരിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ലെങ്കിൽ, ദയവായി ഇത് അടച്ച് മറ്റൊരു മാർഗ്ഗം ശ്രമിക്കുക.",
+       "foreign-structured-upload-form-label-not-own-work-local-local": "താങ്കൾക്ക് [[Special:Upload|സ്വതേ ഉള്ള അപ്‌ലോഡ് താളും]] പരിശോധിക്കാവുന്നതാണ്.",
        "foreign-structured-upload-form-label-own-work-message-default": "ഈ പ്രമാണം പങ്ക് വെയ്ക്കപ്പെട്ടിരിക്കുന്ന ഒരു ശേഖരത്തിലോട്ടാണ് അപ്‌ലോഡ് ചെയ്യുന്നതെന്ന് ഞാൻ മനസ്സിലാക്കുന്നു. അവിടുത്തെ ഉപയോഗ നിബന്ധനകൾക്കും അനുമതി നയങ്ങൾക്കും അനുസൃതമായാണ് ഇത് ചെയ്യുന്നതെന്ന് ഞാൻ സ്ഥിരീകരിക്കുന്നു.",
        "foreign-structured-upload-form-label-not-own-work-message-default": "പങ്ക് വെയ്ക്കപ്പെട്ടിരിക്കുന്ന ശേഖരത്തിന്റെ നയങ്ങളനുസരിച്ച് താങ്കൾക്ക് ഈ പ്രമാണം അപ്‌ലോഡ് ചെയ്യാൻ കഴിയില്ലെങ്കിൽ, ദയവായി ഇത് അടക്കുകയും മറ്റൊരു മാർഗ്ഗം ശ്രമിക്കുകയും ചെയ്യുക.",
        "foreign-structured-upload-form-label-not-own-work-local-default": "ഈ പ്രമാണം അവരുടെ നയങ്ങളുമായി ചേർന്നുപോകുമെങ്കിൽ താങ്കൾക്ക് [[Special:Upload|{{SITENAME}} സംരംഭത്തിലെ അപ്‌ലോഡ് താൾ]] പരീക്ഷിച്ചു നോക്കാവുന്നതാണ്.",
index 7a1baee..7248767 100644 (file)
        "upload-dialog-button-done": "झाले",
        "upload-dialog-button-save": "जतन करा",
        "upload-dialog-button-upload": "अपभारण करा",
-       "upload-process-error": "त्रुटी घडली",
-       "upload-process-warning": "ईशारा उद्भवला",
        "upload-form-label-select-file": "संचिका निवडा",
        "upload-form-label-infoform-title": "तपशील",
        "upload-form-label-infoform-name": "नाव",
index 1d00676..08b2530 100644 (file)
        "prefs-help-recentchangescount": "Chesto ntenne ll'urdeme cagnamiente, 'e cronologgie 'e paggena, e riggistre.",
        "prefs-help-watchlist-token2": "Chest'è 'a chiave segreta pe se ffà 'o feed web 'e l'elenco 'e cuntrolo d' 'o vuosto.\nSi coccheruno 'a cunoscesse, allora putesse vedé l'elenco 'e cuntrollo, picciò nun 'a spartite. [[Special:ResetTokens|Cliccate ccà se tenite necessità d' 'a rimpizzà]].",
        "savedprefs": "'E preferenze songo state sarvate.",
+       "savedrights": "'E dritte 'e l'utente {{GENDER:$1|$1}} sto state sarvate.",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora lucale:",
        "timezoneuseserverdefault": "Aúsa ora predefinita d' 'o wiki ($1)",
        "upload-dialog-button-done": "Fatto",
        "upload-dialog-button-save": "Sarva",
        "upload-dialog-button-upload": "Carreca",
-       "upload-process-error": "N'errore cumparette",
-       "upload-process-warning": "N'avviso cumparette",
        "upload-form-label-select-file": "Sceglie file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nomme",
index 5deced8..10c8d76 100644 (file)
        "upload-dialog-button-done": "Utført",
        "upload-dialog-button-save": "Lagre",
        "upload-dialog-button-upload": "Last opp",
-       "upload-process-error": "En feil oppstod",
-       "upload-process-warning": "En advarsel oppstod",
        "upload-form-label-select-file": "Velg fil",
        "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Navn",
index 8bf7425..8af08a5 100644 (file)
        "upload-dialog-button-done": "सकियो",
        "upload-dialog-button-save": "सङ्ग्रह गर्ने",
        "upload-dialog-button-upload": "अपलोड गर्ने",
-       "upload-process-error": "एक त्रुटि भयो ।",
        "upload-form-label-select-file": "फाइल छान्नुहोस्",
        "upload-form-label-infoform-title": "विवरणहरू",
        "upload-form-label-infoform-name": "नाम",
index 068a16e..93ede18 100644 (file)
        "upload-dialog-button-done": "Afgerond",
        "upload-dialog-button-save": "Opslaan",
        "upload-dialog-button-upload": "Upload",
-       "upload-process-error": "Er is een fout opgetreden",
-       "upload-process-warning": "Een waarschuwing is opgetreden",
        "upload-form-label-select-file": "Selecteer bestand",
        "upload-form-label-infoform-title": "Details",
        "upload-form-label-infoform-name": "Naam",
index 61c61ac..3a6808d 100644 (file)
        "tog-enotifrevealaddr": "Näytä minun sähköpoštuadressii muile lähetettylöis ilmoituksis",
        "tog-shownumberswatching": "Ozuta tädä sivuu tarkailevien käyttäjien miäriä",
        "tog-oldsig": "Nygöine allekirjutus:",
+       "tog-fancysig": "Allekirjutus wikitekstannu (automuattizettah linkittäh)",
        "tog-uselivepreview": "Käytä välittömiä ezikaččeluu",
        "tog-forceeditsummary": "Huomavuta minuu, gu en olle kirjutannuh yhtehveduo",
-       "tog-watchlisthideown": "Peittiä minun korjavukset valvonduluvettelospäi",
+       "tog-watchlisthideown": "Peitä minun korjavukset valvonduluvettelospäi",
        "tog-watchlisthidebots": "Peitä botan kohendukset valdondulistalpäi",
        "tog-watchlisthideminor": "Peitä pienet kohendukset valvondulistalpäi",
        "tog-watchlisthideliu": "Peitä kirjutannuhuoloin käyttäjien kohendukset valvondulistalpäi",
@@ -42,6 +43,8 @@
        "tog-diffonly": "Älä ozuta sivun syväindyö eroverdailun alapuolel",
        "tog-showhiddencats": "Ozuta peitetyt kategouriet",
        "tog-norollbackdiff": "Älä ozuta eroloi, konzu olet ottanuh järilleh aijemban versien järilleh tuondu -toimindol",
+       "tog-useeditwarning": "Ollen lähtemäs sivulpäi iäre tallendamattah muutoksii, huomaita minuu",
+       "tog-prefershttps": "Käytä ainos suojattuu yhtevytty ku olet kirjutannuhes",
        "underline-always": "Ainos",
        "underline-never": "Nikonzu",
        "underline-default": "Ketun libo livaimen piäazetus",
        "hidden-categories": "{{PLURAL:$1|Peitetty kategourii|Peitetyt kategouriet}}",
        "hidden-category-category": "Peitetyt kategouriet",
        "category-subcat-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä alikategourii.|Täs kategouries on nämmä {{PLURAL:$1|subcategory|$1 alikategouriedu}}, kaikkiedah $2.}}",
+       "category-subcat-count-limited": "Täs kategouries on {{PLURAL:$1| alakategourii|$1 alakategouriedu}}.",
        "category-article-count": "{{PLURAL:$2|Täs kategouries on vaiku tämä sivu.|{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries, $2 kaikkiedah.}}",
+       "category-article-count-limited": "{{PLURAL:$1|Tämä sivu on|$1 Nämmä sivut ollah}} täs kategouries.",
        "category-file-count": "{{PLURAL:$2|Täs kategouriis on vaiku tämä failu.| {{PLURAL:$1|Tämä failu on|$1 Nämmä failat ollah}} täs kategouries, $2 kaikkiedah.}}",
        "listingcontinuesabbrev": "(jatko)",
        "index-category": "Indeksiruitut sivut",
index 453c8de..7424ca8 100644 (file)
        "upload-dialog-button-done": "Gotowe",
        "upload-dialog-button-save": "Zapisz",
        "upload-dialog-button-upload": "Prześlij",
-       "upload-process-error": "Wystąpił błąd",
-       "upload-process-warning": "Pojawiło się ostrzeżenie",
        "upload-form-label-select-file": "Wybierz plik",
        "upload-form-label-infoform-title": "Szczegóły",
        "upload-form-label-infoform-name": "Nazwa",
index 7d0c45f..f3f39a9 100644 (file)
        "upload-dialog-button-done": "ترسره شو",
        "upload-dialog-button-save": "خوندي کول",
        "upload-dialog-button-upload": "پورته کول",
-       "upload-process-error": "يوه ستونزه پېښه شوې",
-       "upload-process-warning": "يوه گواښنه رامېنځ ته شوه",
        "upload-form-label-select-file": "دوتنه ټاکل",
        "upload-form-label-infoform-title": "ځانگړنې",
        "upload-form-label-infoform-name": "نوم",
index 9711ee9..e23b815 100644 (file)
@@ -85,7 +85,8 @@
                        "L",
                        "Walesson",
                        "Rhcastilhos",
-                       "Claudio Emanuel Weiler"
+                       "Claudio Emanuel Weiler",
+                       "Almondega"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "prefs-help-recentchangescount": "Isto inclui mudanças recentes, histórico de páginas e registros.",
        "prefs-help-watchlist-token2": "Esta é a senha secreta para o feed da Web com sua lista de tokens vigiados.\nQualquer pessoa que descobrir esta senha será capaz de ler sua lista, então não a compartilhe.\n[[Special:ResetTokens|Clique aqui para redefini-la]].",
        "savedprefs": "As suas preferências foram salvas.",
+       "savedrights": "Os direitos de usuário de {{GENDER:$1|$1}} foram salvos.",
        "timezonelegend": "Fuso horário:",
        "localtime": "Horário local:",
        "timezoneuseserverdefault": "Utilizar padrão do wiki ($1)",
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Salvar",
        "upload-dialog-button-upload": "Enviar",
-       "upload-process-error": "Ocorreu um erro",
-       "upload-process-warning": "Ocorreu um aviso",
        "upload-form-label-select-file": "Selecionar arquivo",
        "upload-form-label-infoform-title": "Detalhes",
        "upload-form-label-infoform-name": "Nome",
index 17d678c..2e05bd6 100644 (file)
        "upload-dialog-button-done": "Feito",
        "upload-dialog-button-save": "Gravar",
        "upload-dialog-button-upload": "Carregar",
-       "upload-process-error": "Ocorreu um erro",
-       "upload-process-warning": "Ocorreu um aviso",
        "upload-form-label-select-file": "Selecionar ficheiro",
        "upload-form-label-infoform-title": "Detalhes",
        "upload-form-label-infoform-name": "Nome",
index 6b593ce..95bd205 100644 (file)
        "prefs-help-recentchangescount": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "prefs-help-watchlist-token2": "Used in [[Special:Preferences]], tab Watchlist. (Formerly in {{msg-mw|prefs-help-watchlist-token}}.)",
        "savedprefs": "This message appears after saving changes to your user preferences.",
+       "savedrights": "This message appears after saving the user rights on [[Special:UserRights]].\n* $1 - The user name of the user which rights was saved.",
        "timezonelegend": "{{Identical|Time zone}}",
        "localtime": "Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].",
        "timezoneuseserverdefault": "[[Special:Preferences]] > Date and time > Time zone\n\nThis option lets your time zone setting use the one that is used on the wiki (often UTC).\n\nParameters:\n* $1 - timezone name, or timezone offset (in \"%+03d:%02d\" format)",
index 3693e3a..d0b800d 100644 (file)
        "prefs-help-recentchangescount": "Sunt incluse schimbările recente, istoricul paginilor și jurnalele.",
        "prefs-help-watchlist-token2": "Aceasta este cheia secretă pentru fluxul web al listei dumneavoastră de pagini urmărite.\nOricine o cunoaște vă va putea citi lista de pagini urmărite, așa că n-o partajați cu nimeni.\n[[Special:ResetTokens|Faceți clic aici dacă doriți să o resetați]].",
        "savedprefs": "Preferințele dumneavoastră au fost salvate.",
+       "savedrights": "Drepturile utilizatorului {{GENDER:$1|$1}} au fost salvate.",
        "timezonelegend": "Fus orar:",
        "localtime": "Ora locală:",
        "timezoneuseserverdefault": "Folosește ora implicită a wikiului ($1)",
        "upload-dialog-button-done": "Realizat",
        "upload-dialog-button-save": "Salvare",
        "upload-dialog-button-upload": "Încarcă",
-       "upload-process-error": "A apărut o eroare",
-       "upload-process-warning": "A apărut o atenționare",
        "upload-form-label-select-file": "Selectează fișier",
        "upload-form-label-infoform-title": "Detalii",
        "upload-form-label-infoform-name": "Nume",
index a19444d..ef53640 100644 (file)
        "missingsummary": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu riepileghe de le cangiaminde.\nCe tu cazze Reggistre 'n'otra vote, 'u cangiamende tue avène memorizzete senze une.",
        "selfredirect": "<strong>Attenziò:</strong> Tu ste redirezione sta pàgene da sule.\nTu puè avè specificate 'a destinazione sbagliate pe stu redirezionamende, o tu ste cange 'a pàgena sbagliate.\nCe tu cazze \"{{int:savearticle}}\" arrete, 'u redirezionamende avène ccrejate 'u stesse.",
        "missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
-       "missingcommentheader": "'''Arrecuèrdete:''' Tu non g'è provvedute a 'nu soggette/testate pe stu commende.\nCe tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
+       "missingcommentheader": "<strong>Arrecuèrdete:</strong> Tu non g'è provvedute a 'nu soggette pe stu commende.\nCe tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
        "summary-preview": "Andeprime d'u riepileghe:",
-       "subject-preview": "Andeprime de l'Oggette/Testete:",
+       "subject-preview": "Andeprime de l'Oggette:",
        "previewerrortext": "'N'errore ha assute quanne ste facive l'andeprime de le cangiaminde.",
        "blockedtitle": "L'utende è blocchete",
        "blockedtext": "''''U nome de l'utende o l'indirizze IP ha state bloccate.'''\n\n'U blocche ha state fatte da $1.\n'U mutive date jè ''$2''.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende 'manne 'na mail a stu utende' senza ca mitte n'indirizze e-mail valide jndr'à le\n[[Special:Preferences|preferenze tue]] e ce è state blocchete sus 'a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
        "mergehistory-go": "Fà vedè le cangiaminde ca se ponne squagghià 'nzieme",
        "mergehistory-submit": "Scuagghije 'nzieme le revisiune",
        "mergehistory-empty": "Nisciuna revisione pò essere scuagghiate.",
-       "mergehistory-done": "$3 {{PLURAL:$3|revisione|revisiune}} de $1 onne state scuagghiate jndr'à [[:$2]] correttamende.",
+       "mergehistory-done": "$3 {{PLURAL:$3|revisione|revisiune}} de $1 {{PLURAL:$3|ha|onne}} state scuagghiate jndr'à [[:$2]].",
        "mergehistory-fail": "Non ge se pò fa vedè 'a storie d'u scuagghiamende, pe piacere verifiche 'n'otra vota a pàgene e le parametre de l'orarie.",
        "mergehistory-fail-toobig": "Non ge pozze combletà 'u scuagghiamende s'u cunde purcé supranesce 'u limite de $1 {{PLURAL:$1|revisione|revisiune}} ca onna essere spustate.",
        "mergehistory-no-source": "'A pàgena sorgende $1 non g'esiste.",
        "upload-dialog-button-done": "Fatte",
        "upload-dialog-button-save": "Reggìstre",
        "upload-dialog-button-upload": "Careche",
-       "upload-process-error": "Ave assute 'n'errore",
-       "upload-process-warning": "Ha assute 'n'avvise",
        "upload-form-label-select-file": "Scacchie 'u file",
        "upload-form-label-infoform-title": "Dettaglie",
        "upload-form-label-infoform-name": "Nome",
        "upload-form-label-infoform-description": "Descrizione",
        "upload-form-label-usage-title": "Ause",
        "upload-form-label-usage-filename": "Nome d'u file",
+       "foreign-structured-upload-form-label-infoform-categories": "Categorije",
        "foreign-structured-upload-form-label-infoform-date": "Date",
        "backend-fail-stream": "Non ge pozze trasmettere 'u file $1.",
        "backend-fail-backup": "Non ge pozze cupià 'u file $1.",
        "deletepage": "Scangille 'a pàgene",
        "confirm": "Conferme",
        "excontent": "'u condenute ere: '$1'",
-       "excontentauthor": "'u condenute ere: '$1' (e l'uneche condrebbutore ere '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "'u condenute ere: '$1' e l'uneche condrebbutore ere \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|'ngazzamende]])",
        "exbeforeblank": "'u condenute apprime d'a pulizie ere: '$1'",
        "delete-confirm": "Scangille \"$1\"",
        "delete-legend": "Scangille",
        "move-page-legend": "Spuèste 'a pàgene",
        "movepagetext": "Ausanne 'u form aqquà sotte ste cange 'u nome d'a pàgene, spustanne tutte 'a storia soje sus a 'u nome nuéve.\nU' vecchie titole devènde 'nu ridirezionamende sus 'a pàgena nove.\nTu puè aggiornà 'u ridirezionamende ca apponde a 'u titole origgenale automaticamende.\nCe tu no ste scacchie, sta secure de condrollà [[Special:DoubleRedirects|doppie ridirezionaminde]] o [[Special:BrokenRedirects|ridirezionaminde scuasciate]].\nTu si 'u responsabbile de quidde ca cumbine, assicurate ca 'u collegamende condinue a appondà addò avessa scè.\n\nVide Bbuene ca 'a pàgene '''non''' g'avène spustate ce esiste n'otra pàgene cu 'u titole nuéve, a mene ca jè vacande o jè 'na pàgene de ridirezionamende senza storie.\nQuieste significhe ca tu puè fà turnà 'u vecchie nome 'a pàgene ce jedde ha state renomenate e t'è rese conde ca è fatte 'na studecarije sovrascrevènne 'na pàgene esistende.\n\n'''ATTENZIONE!'''\nQuiste pò essere 'nu cangiamende drastiche e inaspettate de 'na pàgene famose assaje;\npe piacere a essere secure-secure de le conseguenze apprime de condinuà.",
        "movepagetext-noredirectfixer": "Ausanne 'u module aqquà sotte puè renomenà 'na pàgene, spustanne tutte 'a storia soje sotte a 'u nome nuève.\n'U titele vecchie addevende 'na pàgene de ridirezionamende a 'u titele nuève.\nMe raccomande condrolle le redirezionaminde [[Special:DoubleRedirects|a doppie]] o [[Special:BrokenRedirects|scuasciate]].\nTu si responsabbele de assicurarte ca le collagaminde appondene a 'u punde giuste.\n\nVide ca 'a pàgene '''non''' g'avene spustate ce già stè 'na pàgene cu 'u titele nuève, a meno che non g'è vacande o jè 'nu ridirezionamende e non ge tène 'na storie de cangiaminde.\nQuiste signifeche ca jè possibbele renominà 'na pàgene accume se chiamave apprime addò tu è fatte 'n'errore e non g'è possibbele sovrascirevere 'na pàgene esistende.\n\n'''Fà Attenziò!'''\nQuiste pò essere 'nu cangiamende inaspettate pe 'na pàgene popolare;\nPe piacere ha essere secure secure de avere capite le conzeguenze apprime de scè nnande.",
-       "movepagetalktext": "'A pagene de le 'ngazzaminde associete avène spustete automaticamende ce però:\n\n* Ste 'na pàgene de 'ngazzaminde chiena sotte 'a vôsce nova, o\n* Non ge signe 'u cieck box de sotte.\n\nJndr'à ste case, 'a pàgene non g'avène spustete e pò t'a cupià a màne 'u codenute sue.",
+       "movepagetalktext": "Ce tu cazze sta buatte, 'A pàgene de le 'ngazzaminde associate avène spustate automaticamende, sembre ca non g'esisite 'n'otra pàgene de le 'ngazzaminde.\n\nJndr'à stu case, 'a pàgene non g'avène spustate e pò t'a cupià a màne 'u condenute sue.",
        "moveuserpage-warning": "'''Attenziò:''' Tu stè spuèste 'na pàgene utende. Vide bbuène ca sulamende 'a pàgene avène spustate ma l'utende ''non'' g'avene renomenate.",
        "movecategorypage-warning": "<strong>Attenziò:</strong> Tu vuè ccu spuéste 'na pàgene categorije. Vide ca sulamende 'a pàgene avène spustate ma tutte le pàggene ca stonne jndr'à categorije <em>non</em> g'avène spustate sotte a quedda nove.",
        "movenologintext": "Tu a essere 'n'utende reggistrete e [[Special:UserLogin|colleghete]] pe spustà 'na pàgene.",
        "cant-move-to-user-page": "Tu non ge tìne 'u permesse pe spustà 'na pàgene a 'na pàgene utende (sulamende pe le sottopàggene de l'utinde).",
        "cant-move-category-page": "Tu non ge tìne 'u permesse pe spustà le pàggene de categorije.",
        "cant-move-to-category-page": "Tu non ge tìne 'u permesse pe spustà 'na pàgena cumme 'na pàgene de categorije.",
-       "newtitle": "A 'u titele nuève:",
+       "newtitle": "Titole nuève:",
        "move-watch": "condrolle sta pàgene",
        "movepagebtn": "Spueste 'a pàgene",
        "pagemovedsub": "Spustaminde eseguite",
index cd70f92..7858a58 100644 (file)
@@ -84,7 +84,8 @@
                        "Normalex",
                        "WindEwriX",
                        "Nzeemin",
-                       "INS Pirat"
+                       "INS Pirat",
+                       "Краснорядцева Елена"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "viewsource": "Просмотр",
        "viewsource-title": "Просмотр исходного текста страницы $1",
        "actionthrottled": "Ограничение по скорости",
-       "actionthrottledtext": "Ð\92 ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð¼ÐµÑ\80Ñ\8b Ð±Ð¾Ñ\80Ñ\8cбÑ\8b Ñ\81о Ñ\81памом, Ñ\83Ñ\81Ñ\82ановлено Ð¾Ð³Ñ\80аниÑ\87ение Ð½Ð° Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ\80аÑ\82ное Ð¿Ñ\80именение Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð² Ñ\82еÑ\87ение ÐºÐ¾Ñ\80оÑ\82кого Ð¿Ñ\80омежÑ\83Ñ\82ка Ð²Ñ\80емени. Пожалуйста, повторите попытку через несколько минут.",
+       "actionthrottledtext": "Ð\94лÑ\8f Ð±Ð¾Ñ\80Ñ\8cбÑ\8b Ñ\81о Ñ\81памом Ð±Ñ\8bло Ñ\83Ñ\81Ñ\82ановлено Ð¾Ð³Ñ\80аниÑ\87ение Ð½Ð° Ð¼Ð°ÐºÑ\81ималÑ\8cное Ñ\87иÑ\81ло Ð¿Ð¾Ð¿Ñ\8bÑ\82ок Ð²Ñ\8bполнениÑ\8f Ñ\8dÑ\82ого Ð´ÐµÐ¹Ñ\81Ñ\82виÑ\8f Ð² ÐºÐ¾Ñ\80оÑ\82кий Ð¿Ñ\80омежÑ\83Ñ\82ок Ð²Ñ\80емени â\80\94 Ð¸ Ð²Ñ\8b Ð¸Ñ\81Ñ\87еÑ\80пали Ñ\8dÑ\82оÑ\82 Ð»Ð¸Ð¼Ð¸Ñ\82. Пожалуйста, повторите попытку через несколько минут.",
        "protectedpagetext": "Эта страница защищена для предотвращения её редактирования или совершений других действий.",
        "viewsourcetext": "Вы можете просмотреть и скопировать исходный текст этой страницы.",
        "viewyourtext": "Вы можете просмотреть и скопировать исходный текст <strong>ваших правок</strong> на этой странице.",
        "passwordreset-emailsent-capture": "Отправлено электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже.",
        "passwordreset-emailerror-capture": "Было создано электронное письмо с информацией о сбросе пароля, текст которого можно увидеть ниже, однако его не удалось отправить {{GENDER:$2|участнику|участнице}} по следующей причине: $1",
        "changeemail": "Изменить или удалить адрес электронной почты",
-       "changeemail-header": "Изменение адреса электронной почты",
+       "changeemail-header": "Заполните эту форму, чтобы изменить свой адрес электронной почты. Если вы хотите отвязать свой адрес электронной почты от учётной записи, то при заполнении формы оставьте пустым поле нового адреса электронной почты.",
+       "changeemail-passwordrequired": "Чтобы подтвердить это изменение, вам нужно будет ввести свой пароль.",
        "changeemail-no-info": "Чтобы обращаться непосредственно к этой странице, вам следует представиться системе.",
        "changeemail-oldemail": "Текущий адрес электронной почты:",
        "changeemail-newemail": "Новый адрес электронной почты:",
        "missingsummary": "'''Напоминание.''' Вы не дали краткого описания изменений. При повторном нажатии на кнопку «{{int:savearticle}}» ваши изменения будут сохранены без комментария.",
        "selfredirect": "<strong>Внимание:</strong> Вы создаёте перенаправление на ту же самую статью.\nВозможно, Вы выбрали неправильную целевую страницу для перенаправления или редактируете не ту страницу.\nЕсли Вы нажмёте кнопку «{{int:savearticle}}» ещё раз, перенаправление всё же будет создано.",
        "missingcommenttext": "Пожалуйста, введите ниже ваше сообщение.",
-       "missingcommentheader": "'''Напоминание.''' Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
+       "missingcommentheader": "<strong>Напоминание.</strong> Вы не указали тему/заголовок для этого комментария.\nПри повторном нажатии на кнопку «{{int:savearticle}}», ваша правка будет записана без заголовка.",
        "summary-preview": "Описание будет:",
-       "subject-preview": "Заголовок будет:",
+       "subject-preview": "Заголовок будет выглядеть так:",
        "previewerrortext": "При попытке отобразить предварительный просмотр ваших изменений произошла ошибка.",
        "blockedtitle": "Участник заблокирован",
        "blockedtext": "'''Ваша учётная запись или IP-адрес заблокированы.'''\n\nБлокировка произведена администратором $1.\nУказана следующая причина: «''$2''».\n\n* Начало блокировки: $8\n* Окончание блокировки: $6\n* Цель блокировки: $7\n\nВы можете связаться с $1 или любым другим [[{{MediaWiki:Grouppage-sysop}}|администратором]], чтобы обсудить блокировку.\nОбратите внимание, что не сможете использовать функцию «письмо участнику», если в своих [[Special:Preferences|персональных настройках]] не задали или не подтвердили корректный адрес электронной почты, или если ваша блокировка включает запрет отправки писем подобным образом.\nВаш IP-адрес — $3, идентификатор блокировки — $5.\nПожалуйста, указывайте эти сведения в любых своих обращениях.",
        "parser-template-loop-warning": "Обнаружена петля в шаблонах: [[$1]]",
        "parser-template-recursion-depth-warning": "Превышен предел глубины рекурсии шаблона ($1)",
        "language-converter-depth-warning": "Превышен предел глубины преобразователя языков ($1)",
-       "node-count-exceeded-category": "Странице, на которых превышено число узлов",
+       "node-count-exceeded-category": "Страницы, на которых превышено число узлов",
        "node-count-exceeded-category-desc": "У страницы превышено максимально допустимое число узлов.",
        "node-count-exceeded-warning": "Страница, на которой превышено максимально допустимое число узлов.",
        "expansion-depth-exceeded-category": "Страницы с превышением глубины раскрытия",
        "prefs-help-recentchangescount": "Включает свежие правки, истории страниц, журналы.",
        "prefs-help-watchlist-token2": "Это секретный ключ для веб-канала вашего списка наблюдений.\nЛюбой, кто знает его, сможет читать ваш список наблюдения, поэтому не сообщайте его другим. [[Special:ResetTokens|Нажмите здесь, если вам нужно сбросить его]].",
        "savedprefs": "Ваши настройки сохранены.",
+       "savedrights": "Права пользователя {{GENDER:$1|$1}} были сохранены.",
        "timezonelegend": "Часовой пояс:",
        "localtime": "Местное время:",
        "timezoneuseserverdefault": "Использовать настройки сервера ($1)",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Сохранить",
        "upload-dialog-button-upload": "Загрузить",
-       "upload-process-error": "Произошла ошибка",
-       "upload-process-warning": "Появилось предупреждение",
        "upload-form-label-select-file": "Выбрать файл",
        "upload-form-label-infoform-title": "Подробности",
        "upload-form-label-infoform-name": "Имя",
        "foreign-structured-upload-form-label-not-own-work-message-local": "Если Вы не можете загрузить этот файл в соответствиями с правилами сайта {{SITENAME}}, пожалуйста, закройте это диалоговое окно и попробуйте другой метод.",
        "foreign-structured-upload-form-label-not-own-work-local-local": "Возможно, вы также захотите попробовать [[Special:Upload|страницу загрузки по умолчанию]].",
        "foreign-structured-upload-form-label-own-work-message-default": "Я понимаю, что загружаю этот файл в общий репозиторий. Я подтверждаю, что я делаю это в соответствии с пользовательским соглашением и лицензионной политикой.",
+       "foreign-structured-upload-form-label-not-own-work-message-default": "Если Вы не можете загрузить этот файл в соответствиями с правилами общего хранилища, пожалуйста, закройте это диалоговое окно и попробуйте другой метод.",
+       "foreign-structured-upload-form-label-not-own-work-local-default": "В том случае, если этот файл может быть загружен в соответствии с правилами сайта {{SITENAME}}, вы также можете попробовать использовать его [[Special:Upload|страницу загрузки]].",
        "foreign-structured-upload-form-label-not-own-work-message-shared": "Если вы не являетесь владельцем авторских прав на этот файл, или вы хотите выпустить его под другой лицензией, рассмотрите возможность использования [https://commons.wikimedia.org/wiki/Special:UploadWizard Мастера загрузки на Викисладе].",
+       "foreign-structured-upload-form-label-not-own-work-local-shared": "В том случае, если этот файл может быть загружен в соответствии с правилами сайта {{SITENAME}}, вы также можете попробовать использовать его [[Special:Upload|страницу загрузки]].",
        "backend-fail-stream": "Не удалось транслировать файл $1.",
        "backend-fail-backup": "Невозможно сделать резервную копию файла $1.",
        "backend-fail-notexists": "Файл $1 не существует.",
        "svg-long-error": "Неправильный SVG-файл: $1",
        "show-big-image": "Исходный файл",
        "show-big-image-preview": "Размер при предпросмотре: $1.",
+       "show-big-image-preview-differ": "Размер этого $3-превью для исходного $2-файла: $1.",
        "show-big-image-other": "{{PLURAL:$2|1=Другое разрешение|Другие разрешения}}: $1.",
        "show-big-image-size": "$1 × $2 пикселей",
        "file-info-gif-looped": "закольцованный",
index b36de28..96b8e89 100644 (file)
        "nologin": "सदस्यता नास्ति किम् ? $1",
        "nologinlink": "सदस्यता प्राप्यताम्",
        "createaccount": "सदस्यता प्राप्यताम्",
-       "gotaccount": "पà¥\82रà¥\8dवमà¥\87व à¤¯à¥\8bà¤\9cà¤\95ः अस्ति किम् ? $1",
+       "gotaccount": "पà¥\82रà¥\8dवमà¥\87व à¤¸à¤¦à¤¸à¥\8dयः अस्ति किम् ? $1",
        "gotaccountlink": "प्रविश्यताम्",
        "userlogin-resetlink": "स्वस्य प्रवेशविवरणानि विस्मृतानि किम् ?",
        "userlogin-resetpassword-link": "स्वस्य कूटशब्दः विस्मृतः किम् ?",
        "loginsuccesstitle": "स्वागतं ! प्रवेशः सिद्धः ।",
        "loginsuccess": "भवता/भवत्या {{SITENAME}} इत्यत्र \"$1\"-योजकत्वेन प्रवेशः प्राप्तः ।",
        "nosuchuser": "'''$1''' नाम्नः न कोऽपि योजकः विद्यते ।\n\nप्रयोक्तृनामानि पक्षानुगुणं (case sensitive) भवन्ति ।\n\nयत् टङ्कितं, तत् पश्यतु अथवा [[Special:UserLogin/signup|नूतनसदस्यता प्राप्यताम्]] ।",
-       "nosuchusershort": "'''$1''' à¤¨à¤¾à¤®à¥\8dनà¤\83 à¤¨ à¤\95à¥\8bऽपि à¤¯à¥\8bà¤\9cà¤\95ः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
+       "nosuchusershort": "'''$1''' à¤¨à¤¾à¤®à¥\8dनà¤\83 à¤¨ à¤\95à¥\8bऽपि à¤¸à¤¦à¤¸à¥\8dयः विद्यते ।\n\nयत् टङ्कितं, तत् पश्यतु ।",
        "nouserspecified": "भवता/भवत्या एकं योग्यं प्रयोक्तृनाम अवश्यमेव दातव्यम् ।",
-       "login-userblocked": "à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः प्रतिबन्धितः । प्रवेष्टुम् अनुमतिः नास्ति ।",
+       "login-userblocked": "à¤\8fषà¤\83 à¤¸à¤¦à¤¸à¥\8dयः प्रतिबन्धितः । प्रवेष्टुम् अनुमतिः नास्ति ।",
        "wrongpassword": "भवता/भवत्या लिखितः कूटशब्दः त्रुटियुक्तः । \nकृपया पुनः लिख्यताम् ।",
        "wrongpasswordempty": "कूटशब्दपेटिकायां कूटशब्दः न लिखितः ।\n\nकृपया पुनः प्रयासः क्रियताम् ।",
        "passwordtooshort": "न्यूनातिन्यूनं {{PLURAL:$1| 1 अक्षरात्मकः|$1 अक्षरात्मकः}} कूटशब्दः भवेदेव ।",
        "eauthentsent": "अधिकृतपुष्टै भवता/भवत्या पञ्जीकृताय वि-पत्रसङ्केताय वि-पत्रं प्रेषितमस्ति । तस्य वि-पत्रसङ्केतस्यैव इतः परम् उपयोगः भवतु इति इच्छति चेत् प्रेषिते वि-पत्रे यथा लिखितमस्ति, तथा करोतु । एवं तस्य वि-पत्रसङ्केतस्य अधिकृतपुष्टता भविष्यति ।",
        "throttled-mailpassword": "कूटशब्दं परिर्वतितुं भवतः/भवत्याः पञ्जीकृताय वि-पत्रसङ्केताय अन्तिम{{PLURAL:$1|होरायां|$1 होरासु}} नूतनकूटशब्दः प्रेषितः अस्ति ।\n\nदुरुपयोगं वारयितुम् प्रति {{PLURAL:$1|होरं|$1 होरं}} केवलम् एकम् वि-पत्रं प्रेष्यते ।",
        "mailerror": "वि-पत्रसम्प्रेषणे दोषः : $1",
-       "acct_creation_throttle_hit": "à¤\9aतà¥\81à¥\8dरà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81 à¤\85सà¥\8dय à¤¸à¤\99à¥\8dà¤\97णà¤\95सà¥\8dय à¤\86नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदा (IP) {{PLURAL:$1|1 à¤¯à¥\8bà¤\9cà¤\95à¤\83|$1 à¤¯à¥\8bà¤\9cà¤\95ाà¤\83}} à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापà¥\8dतवानà¥\8d/वनà¥\8dतà¤\83 à¥¤ à¤\85दà¥\8dय à¤\87तà¥\8bपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
+       "acct_creation_throttle_hit": "à¤\9aतà¥\81à¥\8dरà¥\8dविà¤\82शतिà¤\98णà¥\8dà¤\9fासà¥\81 à¤\85सà¥\8dय à¤¸à¤\99à¥\8dà¤\97णà¤\95सà¥\8dय à¤\86नà¥\8dतरà¥\8dà¤\9cालसà¤\82विदा (IP) {{PLURAL:$1|1 à¤¸à¤¦à¤¸à¥\8dयà¤\83|$1 à¤¸à¤¦à¤¸à¥\8dयाà¤\83}} à¤¸à¤¦à¤¸à¥\8dयताà¤\82 à¤ªà¥\8dरापà¥\8dतवानà¥\8d/वनà¥\8dतà¤\83 à¥¤ à¤\85दà¥\8dय à¤\87तà¥\8bऽपि अधिकसदस्याः प्राप्तुं न शक्यन्ते ।",
        "emailauthenticated": "$2 दिनाङ्के $3 वादने भवतः/भवत्याः वि-पत्रसङ्केतः पुष्टितः ।",
        "emailnotauthenticated": "एतावता भवतः/भवत्याः वि-पत्रसङ्केतः पुष्टः नाभवत् । \nनिम्नलिखिताय न किमपि वि-पत्रं प्रेषयितुं शक्यते ।",
        "noemailprefs": "एनं विकल्पं समर्थितुम् \"इष्टतमानि\" मध्ये भवतः/भवत्याः वि-पत्रसङ्केतस्य उल्लेखः आवश्यकः ।",
        "passwordreset-email": "वि-पत्रसङ्केतः",
        "passwordreset-emailtitle": "{{SITENAME}} इत्यत्र योजकविषये",
        "passwordreset-emailtext-ip": "कोऽपि (कदाचित् भवान्/भवती, $1 अन्तर्जालसंविदः (from IP)) {{SITENAME}}($4) जालस्थानस्य  कृते कूटशब्दपरिवर्तनस्य विनतिम् अकरोत् । निम्न{{PLURAL:$3|योजकः|योजकाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विनतिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
-       "passwordreset-emailtext-user": "$1 à¤¯à¥\8bà¤\9cà¤\95à¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
+       "passwordreset-emailtext-user": "$1 à¤¸à¤¦à¤¸à¥\8dयà¤\83 {{SITENAME}}($4) à¤\9cालसà¥\8dथानसà¥\8dय  à¤\95à¥\83तà¥\87 à¤\95à¥\82à¤\9fशबà¥\8dदपरिवरà¥\8dतनसà¥\8dय à¤µà¤¿à¤¨à¤¤à¤¿à¤®à¥\8d à¤\85à¤\95रà¥\8bतà¥\8d à¥¤ à¤¨à¤¿à¤®à¥\8dन{{PLURAL:$3|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}} अनेन वि-पत्रेण सह सल्लग्नः अस्ति/सल्लग्नाः सन्ति ।\n\n$2\n\n{{PLURAL:$3|एषः अल्पकालीनकूटशब्दः|एते अल्पकालीनकूटशब्दाः}} {{PLURAL:$5|चतुर्विंशतिघण्टासु|$5 दिनेषु}} निरस्तः भविष्यति/निरस्ताः भविष्यन्ति ।\nअधुना प्रवेशं सम्प्राप्य कूटशब्दः परिवर्तनीयः एव । \n\nनिम्नकारणानि यदि सन्ति, तर्हि एनं सन्देशम् अवगण्यताम् ।\n\n१ कोऽपि अन्यः अत्र विज्ञप्तिम् अकरोत् । \n२ पूरातनः कूटशब्दः भवतः/भवत्याः स्मरणे अस्ति ।\n३ भवान्/भवती कूटशब्दं परिवर्तयितुं नेच्छिति ।",
        "passwordreset-emailelement": "प्रयोक्तृनाम : \n$1\n\nअल्पकालीनकूटशब्दः : \n$2",
        "passwordreset-emailsent": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति ।",
        "passwordreset-emailsent-capture": "परिवर्तितकूटशब्दस्य वि-पत्रं प्रेषितम् अस्ति । तत् अधः द्रष्टुं शक्यते ।",
        "searchprofile-everything-tooltip": "सर्वत्र अन्विष्यताम् (चर्चापृष्ठानि अपि)",
        "searchprofile-advanced-tooltip": "नामाकाशेषु अन्विष्यताम्",
        "search-result-size": "$1 ({{PLURAL:$2|1 शब्दः|$2 शब्दाः}})",
-       "search-result-category-size": "{{PLURAL:$1|1 à¤¯à¥\8bà¤\9cà¤\95à¤\83|$1 à¤¯à¥\8bà¤\9cà¤\95ाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
+       "search-result-category-size": "{{PLURAL:$1|1 à¤¸à¤¦à¤¸à¥\8dयà¤\83|$1 à¤¸à¤¦à¤¸à¥\8dयाः}} ({{PLURAL:$2|1 उपवर्गः|$2 उपवर्गाः}}, {{PLURAL:$3|1 सञ्चिका|$3 सञ्चिकाः}})",
        "search-redirect": "($1 तः अनुप्रेषितम्)",
        "search-section": "(विभागः $1)",
        "search-category": "(वर्गः $1)",
        "prefs-emailconfirm-label": "वि-पत्रं दृढीक्रियताम् :",
        "youremail": "वि-पत्रसङ्केतः :",
        "username": "{{GENDER:$1|योजकनाम}} :",
-       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|यà¥\8bà¤\9cà¤\95à¤\83/यà¥\8bà¤\9cà¤\95ाः}} :",
+       "prefs-memberingroups": "{{PLURAL:$1|समà¥\82हसà¥\8dय|समà¥\82हानाà¤\82}} {{GENDER:$2|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}} :",
        "prefs-registration": "पञ्जीकरणकालः :",
        "yourrealname": "वास्तविकनाम :",
        "yourlanguage": "भाषा :",
        "prefs-dateformat": "दिनाङ्कस्य प्रारूपः",
        "prefs-timeoffset": "समयान्तरम्",
        "prefs-advancedediting": "सामान्यविकल्पाः",
-       "prefs-editor": "यà¥\8bà¤\9cà¤\95ः",
+       "prefs-editor": "सदसà¥\8dयः",
        "prefs-preview": "प्राग्दृश्यम्",
        "prefs-advancedrc": "विशेषविकल्पाः",
        "prefs-advancedrendering": "विशेषविकल्पाः",
        "saveusergroups": "योजकसमूहः रक्ष्यताम्",
        "userrights-groupsmember": "अस्य सदस्यः :",
        "userrights-groupsmember-auto": "निम्न{{PLURAL:$1|समूहस्य|समूहानाम्}} अन्तर्निहितः सदस्यः :",
-       "userrights-groups-help": "à¤\85सà¥\8dय à¤¸à¤¦à¤¸à¥\8dयसà¥\8dय à¤¸à¤®à¥\82हसदसà¥\8dयतà¥\8dवà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ \n* à¤\85à¤\99à¥\8dà¤\95नपà¥\87à¤\9fिà¤\95ा (check box) à¤\85à¤\99à¥\8dà¤\95िता à¤\9aà¥\87तà¥\8d, à¤¯à¥\8bà¤\9cà¤\95ः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
+       "userrights-groups-help": "à¤\85सà¥\8dय à¤¸à¤¦à¤¸à¥\8dयसà¥\8dय à¤¸à¤®à¥\82हसदसà¥\8dयतà¥\8dवà¤\82 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतयितà¥\81à¤\82 à¤¶à¤\95à¥\8dयतà¥\87 à¥¤ \n* à¤\85à¤\99à¥\8dà¤\95नपà¥\87à¤\9fिà¤\95ा (check box) à¤\85à¤\99à¥\8dà¤\95िता à¤\9aà¥\87तà¥\8d, à¤¸à¤¦à¤¸à¥\8dयः अस्य समूहस्य सदस्यः अस्ति ।\n* अङ्कनपेटिका अनङ्किता चेत्, योजकः अस्य समूहस्य सदस्यः नास्ति ।\n* एकवारं समूहः योजितः अपाकृतः वा चेत्, पुनः पूर्ववत् कर्तुं न शक्यते इति * चिह्नं सूचयति ।",
        "userrights-reason": "कारणम् :",
        "userrights-no-interwiki": "अन्यविकि-जालस्थानेषु योजकाधिकारं सम्पादयितुं ते अनुमतिः नास्ति ।",
        "userrights-nodatabase": "$1 दत्तांशनिधिः न विद्यते अथवा तु सः स्थानीयः नास्ति ।",
        "group-bureaucrat": "अधिकारिणः",
        "group-suppress": "अलक्ष्यम्",
        "group-all": "(सर्वम्)",
-       "group-user-member": "{{GENDER:$1|यà¥\8bà¤\9cà¤\95ः}}",
+       "group-user-member": "{{GENDER:$1|सदसà¥\8dयः}}",
        "group-autoconfirmed-member": "{{GENDER:$1|स्वदृढितयोजकः}}",
        "group-bot-member": "{{GENDER:$1|बॉट्}}",
        "group-sysop-member": "{{GENDER:$1|प्रबन्धकः}}",
        "right-viewsuppressed": "अन्ययोजकैः गूहितं संस्करणं दृश्यताम्",
        "right-suppressionlog": "वैयक्तिकसंस्करणानि दृश्यन्ताम्",
        "right-block": "अस्य योजकस्य सम्पादनानि अवरुध्यन्ताम्",
-       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fषà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः अवरुध्यताम्",
+       "right-blockemail": "वि-पतà¥\8dरपà¥\8dरà¥\87षयितà¥\81मà¥\8d à¤\8fषà¤\83 à¤¸à¤¦à¤¸à¥\8dयः अवरुध्यताम्",
        "right-hideuser": "प्रयोक्तृनाम अवरुध्यताम्, तत् अन्ययोजकेभ्यः गोप्यतां च",
        "right-ipblock-exempt": "स्वयम् अवरोधितं, समूहावरोधितम् अन्तर्जालसङ्केतम् (IP) अवगण्य अग्रे गच्छतु",
        "right-proxyunbannable": "प्रतिनिधीनां (of prxies) स्वयम्-अवरोधान् अवगण्य अग्रे गच्छतु",
        "minoreditletter": "(लघु)",
        "newpageletter": "(नवीनम्)",
        "boteditletter": "(बोट्)",
-       "number_of_watching_users_pageview": "[$1 à¤\85वलà¥\8bà¤\95यति {{PLURAL:$1|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}}]",
+       "number_of_watching_users_pageview": "[$1 à¤\85वलà¥\8bà¤\95यति {{PLURAL:$1|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}}]",
        "rc_categories": "वर्गान् नियतीकरोतु ।",
        "rc_categories_any": "कश्चित्",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} परिवर्तनपश्चात् ।",
        "filehist-thumb": "लघ्वाकृतिः",
        "filehist-thumbtext": "$1 इत्यस्य संस्करणस्य लघुस्वरूपम् ।",
        "filehist-nothumb": "अङ्गुष्टनखाकारकं नाश्ति ।",
-       "filehist-user": "यà¥\8bà¤\9cà¤\95ः",
+       "filehist-user": "सदसà¥\8dयः",
        "filehist-dimensions": "आयामाः",
        "filehist-filesize": "सञ्चिकाकारः ।",
        "filehist-comment": "टिप्पणी",
        "statistics-files": "उद्भारितसञ्चिकाः",
        "statistics-edits": "{{SITENAME}} व्यवस्थापनपर्यन्तं पुटसम्पादनानि ।",
        "statistics-edits-average": "प्रतिपुटं माध्यसम्पादनानि ।",
-       "statistics-users": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83तà¤\83 [[Special:ListUsers|यà¥\8bà¤\9cà¤\95ः]]",
+       "statistics-users": "पà¤\9eà¥\8dà¤\9cà¥\80à¤\95à¥\83तà¤\83 [[Special:ListUsers|सदसà¥\8dयः]]",
        "statistics-users-active": "सक्रियाः सदस्याः",
        "statistics-users-active-desc": "गतेषु {{PLURAL:$1|day|$1 दिनेषु}} सक्रियाः योजकाः  ।",
        "pageswithprop": "प्रगुणविशेषयुतानि पृष्ठानि",
        "ncategories": "{{PLURAL:$1|वर्गः|वर्गाः }}",
        "ninterwikis": "$1 {{PLURAL:$1|अन्तार्विकी|अन्तार्विक्यः}}",
        "nlinks": "$1 {{PLURAL:$1|परिसन्धिः|परिसन्धयः}}",
-       "nmembers": "$1 {{PLURAL:$1|यà¥\8bà¤\9cà¤\95à¤\83|यà¥\8bà¤\9cà¤\95ाः}}",
+       "nmembers": "$1 {{PLURAL:$1|सदसà¥\8dयà¤\83|सदसà¥\8dयाः}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|सदस्यः|सदस्याः}}",
        "nrevisions": "$1 {{PLURAL:$1|पुनरावृत्तिः}}",
        "nimagelinks": "$1 {{PLURAL:$1|पुटम्|पुटानि}} प्रयुक्तानि ।",
        "linksearch-error": "वन्यपत्राणि आतिथेयस्य नाम्ना समं केवलं प्रभान्ति ।",
        "listusersfrom": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
        "listusers-submit": "दृश्यताम्",
-       "listusers-noresult": "यà¥\8bà¤\9cà¤\95ः न प्राप्तः ।",
+       "listusers-noresult": "सदसà¥\8dयः न प्राप्तः ।",
        "listusers-blocked": "अवरुद्धम् ।",
        "activeusers": "सक्रिययोजकानाम् आवली ।",
        "activeusers-intro": "एषा तु गतेषु $1 {{PLURAL:$1|दिनेषु}} कृतकार्याणां योजकाना आवली ।",
        "activeusers-from": "एतस्मात् आरभमाणान् योजकान् दर्शयतु ।",
        "activeusers-hidebots": "स्वयं चालकान् गोपयतु ।",
        "activeusers-hidesysops": "प्रशासकान् गोपयतु ।",
-       "activeusers-noresult": "यà¥\8bà¤\9cà¤\95ः न प्राप्तः ।",
+       "activeusers-noresult": "सदसà¥\8dयः न प्राप्तः ।",
        "listgrouprights": "योजकसमूहाधिकाराः ।",
        "listgrouprights-summary": "अधोदत्ता विकिपरिभाषितस्य सङ्गताभिगम्यताधिकारैः सहिता योजकसमूहस्य आवली । [[{{MediaWiki:Listgrouprights-helppage}}|additional information]]",
        "listgrouprights-key": "विवरणम् -\n* <span class=\"listgrouprights-granted\">दत्ताधिकाराः</span>\n* <span class=\"listgrouprights-revoked\">हृताधिकाराः</span>",
        "mailnologintext": "अस्य योजकेभ्यः विद्युन्मानपत्रप्रेषणार्थम् [[Special:UserLogin|नामाभिलेखनम्]] आवश्यकम् [[Special:Preferences|आद्यता]]यां प्रेषयितुं विद्युन्मानपत्रसङ्केतः आवश्यकः ।",
        "emailuser": "एतस्मै योजकाय वि-पत्रं प्रेष्यताम्",
        "emailuser-title-target": "{{GENDER:$1|एतस्मै सदस्याय}} वि-पत्रं प्रैष्यताम्",
-       "emailuser-title-notarget": "à¤\88पतà¥\8dर à¤¯à¥\8bà¤\9cà¤\95ः",
+       "emailuser-title-notarget": "वि-पतà¥\8dरयà¥\81à¤\95à¥\8dतà¤\83 à¤¸à¤¦à¤¸à¥\8dयः",
        "emailpagetext": "{{GENDER:$1|अस्मै}} योजकाय विद्युन्मानपत्रं प्रेषयितुम् अधो दत्तप्रपत्रम् उपयोक्तुं शक्नोति । \n[[Special:Preferences|your user preferences]] अत्र भवता विनिवेशितः वि-पत्रसङ्केतः सकाशात् इति स्थाने प्रतिभाति । अनेन स्वीकर्ता साक्षात् प्रत्युत्तरं दातुं प्रभविष्यति ।",
        "defemailsubject": "{{SITENAME}}\"$1\" इति योजकात् विद्युन्मानपत्रम् ।",
        "usermaildisabled": "योजकस्य विद्युन्मानपत्रं निष्क्रियम् ।",
        "usermaildisabledtext": "अस्यां विक्याम् अन्ययोजकेभ्यः विद्युन्मानपत्रं प्रेषयितुं नै शक्नोति ।",
        "noemailtitle": "विद्युन्मानपत्रसङ्केतः नास्ति ।",
        "noemailtext": "अस्य योजकस्य निरिदिष्टः विद्युन्मानपत्रसङ्केतः नास्ति ।",
-       "nowikiemailtext": "à¤\85यà¤\82 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤\85नà¥\8dययà¥\8bà¤\9cà¤\95à¥\87भà¥\8dयà¤\83 à¤µà¤¿-पतà¥\8dराणि à¤¸à¥\8dवà¥\80à¤\95ार्तुं नेच्छति ।",
+       "nowikiemailtext": "à¤\85यà¤\82 à¤¸à¤¦à¤¸à¥\8dयà¤\83 à¤\85नà¥\8dयसदसà¥\8dयà¥\87भà¥\8dयà¤\83 à¤µà¤¿-पतà¥\8dराणि à¤¸à¥\8dवà¥\80à¤\95र्तुं नेच्छति ।",
        "emailnotarget": "स्वीकर्तुः अस्तित्वविहीनम् अथवा अमान्यं योजकनाम  ।",
        "emailtarget": "स्वीकर्तुः योजकनाम लिखतु ।",
        "emailusername": "योजकनामन्:",
        "enotif_body_intro_changed": "{{SITENAME}} पृष्ठं $1 इत्येतत् $PAGEEDITDATE इति दिनाङ्के {{gender:$2 इत्यनेन|$2 इत्यनया}} परिवर्तितमस्ति, वर्तमानसंस्करणार्थं $3 इत्येतत् दृश्यताम्।",
        "enotif_lastvisited": "भवतः पूवसन्दर्शनस्य पश्चात् सवृत्तपरिवर्तनार्थं $1 पश्यतु ।",
        "enotif_lastdiff": "परिवर्तनं दृष्टुम् एतत् $1 पश्यतु ।",
-       "enotif_anon_editor": "à¤\85नामà¤\95à¤\83 à¤¯à¥\8bà¤\9cà¤\95ः $1",
+       "enotif_anon_editor": "à¤\85नामà¤\95à¤\83 à¤¸à¤¦à¤¸à¥\8dयः $1",
        "enotif_body": "प्रिय $WATCHINGUSERNAME !,\n\n$PAGEINTRO $NEWPAGE\n\nसम्पादकस्य सारांशः : $PAGESUMMARY $PAGEMINOREDIT\n\nसम्पादकेन स्य सम्पर्कः :\nवि-पत्रम् : $PAGEEDITOR_EMAIL\nविकि    : $PAGEEDITOR_WIKI\n\nयावत् पुनःप्रवेशं प्राप्य भवान्/भवती एतत् पृष्ठं प्रति पुनः न गच्छति, तावत् अन्यपरिवर्तने सत्यपि भवते/भवत्यै सूचना प्रेषयितुं न शक्यते ।\nइच्छति चेत्, स्वनिरीक्षासूच्यां स्थितानां पृष्ठानां चिह्नं परिवर्तयितुं शक्नोति ।\n\n{{SITENAME}} सहायकानां सूचकप्रणाली\n\n--\nस्वस्य वि-पत्रस्य सूचनायाः व्यवस्थां परिवर्तयितुम् अत्र दृश्यताम् \n{{canonicalurl:{{#special:Preferences}}}}\n\nस्वस्य निरीक्षासूच्याः व्यवस्थां परिवर्तयितुम् अत्र दृश्यताम् \n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nएतत् पृष्ठं स्वनिरीक्षासूच्याः अपाकर्तुम् \n$UNWATCHURL\n\nपरामर्शं दातुम् उत साहाय्यं प्राप्तुम् :\n$HELPPAGE",
        "created": "सृष्टम् ।",
        "changed": "परिवर्तितम् ।",
        "autoblockid": "स्वयं पिहितम् । $1",
        "block": "योजकम् अवरुणद्धु ।",
        "unblock": "योजकम् अनवरुणद्धु ।",
-       "blockip": "{{GENDER:$1|यà¥\8bà¤\9cà¤\95ः}} अवरुद्ध्यताम्",
+       "blockip": "{{GENDER:$1|सदसà¥\8dयः}} अवरुद्ध्यताम्",
        "blockip-legend": "योजकम् अवरुणद्धु ।",
        "blockiptext": "विशिष्टं  IP सङ्केतम् अथवा योजकनाम लेखानाधिकारस्य प्राप्तये निम्नदत्तपत्रस्य उपयोगं करोतु ।\nकेवलं नाशकत्वम् अवरोद्धुं एतस्य उपयोगं करोतु । [[{{MediaWiki:Policy-url}}|नीतिः]] इत्यानुसारं करणीयम् ।\nअधः विशिष्टं कारणमपि लिखतु ।",
        "ipaddressorusername": "आइ.पी.सङ्केतः अथवा योजकनाम :",
        "autoblocker": "भवतः/भवत्याः अन्तर्जालसङ्केतः \"[[User:$1|$1]]\" इत्यनेन उपयुज्यमानः अस्ति, अतः स्वतः अवरुद्धः ।\n$1 इत्यस्य अवरोधनस्य \"$2\" इत्येतत् कारणं विद्यते ।",
        "blocklogpage": "अवरोधाऽऽवलिः",
        "blocklog-showlog": "अयम् एपि सङ्केतः पूर्वमेव अवरुद्धः । \nअवरोधसूची आधाराय अधः दत्तः अस्ति :",
-       "blocklog-showsuppresslog": "à¤\85यà¤\82 à¤¯à¥\8bà¤\9cà¤\95ः पूर्वमेव अवरुद्धः सङ्गुप्तः च  ।\nनिग्रहकरणं तु अधः उल्लिखितम् ।",
+       "blocklog-showsuppresslog": "à¤\85यà¤\82 à¤¸à¤¦à¤¸à¥\8dयः पूर्वमेव अवरुद्धः सङ्गुप्तः च  ।\nनिग्रहकरणं तु अधः उल्लिखितम् ।",
        "blocklogentry": "$2 $3 समयपर्यन्तं [[$1]] एतत् प्रतिबन्धितं वर्तते",
        "reblock-logentry": "[[$1]] इत्यस्य अवरोधस्य विन्यासः परिवर्तितः अयं $2 $3 समये विनश्येत् ।",
        "blocklogtext": "इयम् अवरुद्धानवरुद्धप्रक्रियायाः अवलोकनस्य सूचिका । \nस्वयम् अवरुद्धानाम् ऐपिसङ्केतानाम् आवली न कृता ।\nसद्यः उपयोगनिषेधस्य अवरोधानाम् आवलीप्राप्तये [[Special:BlockList|block list]] अवलोकयतु ।",
        "sorbsreason": "DNSBL उपयोगः {{SITENAME}} कृतस्य भवतः ऐपिसङ्केतः मुक्तप्रतिहस्तकः इति आवलीगतः",
        "sorbs_create_account_reason": "DNSBL उपयुक्तः {{SITENAME}} अतः भवतः ऐपिसङ्केतः अवरुद्धः यतः अयं मुक्तप्रतिहस्तकः इति आवलीगतः । अतः भवान् योजकस्थानं निर्मातुं न शक्नोति ।",
        "xffblockreason": "X-Forwarded-For इत्यस्मिन् स्थितः शिरोभागः भवाताम् उत यत् प्रतिनिधिवितरकं भवान्/भवती उपयुङ्क्ते, सः प्रतिबन्धितः अस्ति । अवरोधस्य मूलकारणम् $1 आसीत् ।",
-       "cant-see-hidden-user": "यà¤\82 à¤¯à¥\8bà¤\9cà¤\95à¤\83 à¤\85वरà¥\8bदà¥\8dधà¤\82 à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\8dरयतमानà¤\83 à¤¸à¤\83 à¤ªà¥\82रà¥\8dवमà¥\87व à¤\85वरà¥\81दà¥\8dधà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\81पà¥\8dतà¤\83 à¤\9a à¥¤\nभवानà¥\8d à¤¤à¥\81 à¤¯à¥\8bà¤\9cà¤\95सà¤\99à¥\8dà¤\97à¥\8bपनाधिà¤\95ारयà¥\81à¤\95à¥\8dतà¤\83 à¤¨ à¥¤ à¤\85तà¤\83 à¤­à¤µà¤¾à¤¨à¥\8d à¤¯à¥\8bà¤\9cà¤\95ावरोधं दृष्टुं सम्पादयितुं वा न शक्नोति ।",
+       "cant-see-hidden-user": "यà¤\82 à¤¸à¤¦à¤¸à¥\8dयमà¥\8d à¤\85वरà¥\8bदà¥\8dधà¤\82 à¤­à¤µà¤¾à¤¨à¥\8d à¤ªà¥\8dरयतमानà¤\83 à¤¸à¤\83 à¤ªà¥\82रà¥\8dवमà¥\87व à¤\85वरà¥\81दà¥\8dधà¤\83 à¤¸à¤\99à¥\8dà¤\97à¥\81पà¥\8dतà¤\83 à¤\9a à¥¤\nभवानà¥\8d à¤¤à¥\81 à¤¸à¤¦à¤¸à¥\8dयासà¤\99à¥\8dà¤\97à¥\8bपनाधिà¤\95ारयà¥\81à¤\95à¥\8dतà¤\83 à¤¨ à¥¤ à¤\85तà¤\83 à¤­à¤µà¤¾à¤¨à¥\8d à¤¸à¤¦à¤¸à¥\8dयावरोधं दृष्टुं सम्पादयितुं वा न शक्नोति ।",
        "ipbblocked": "भवान् अन्ययोजकान् अवरोद्धुम् विमोचयितुं वा न शक्नोति । यतः भवान् तु अवरुद्धः अस्ति ।",
        "ipbnounblockself": "भवान् भवन्तं मोचयितुं नैव शक्नोति ।",
        "lockdb": "दत्तपाठान् अवरुणद्धु ।",
        "scarytranscludefailed-httpstatus": "[$1 : इत्यस्य कृते फलकसङ्कर्षणम् असफलम् HTTP $2]",
        "scarytranscludetoolong": "[URLअतिदीर्घा अस्ति ]",
        "deletedwhileediting": "पूर्वसूचना : भवतः सम्पादनारम्भात् पश्चात् एतत् पुटम् अपमर्जितम् ।",
-       "confirmrecreate": "यà¥\8bà¤\9cà¤\95à¤\83 [[User:$1|$1]] ([[User talk:$1|समà¥\8dभाषणमà¥\8d]]) à¤¸à¤\95ारणà¤\82 à¤­à¤µà¤¤à¤\83 à¤¸à¤®à¥\8dपादनातà¥\8d à¤ªà¤°à¤\82 à¤ªà¥\81à¤\9fमà¥\87ततà¥\8d à¤\85पमरà¥\8dà¤\9cितमà¥\8d à¥¤ \n: ''$2''\nएतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
-       "confirmrecreate-noreason": "यदा à¤­à¤¾à¤µà¤¾à¤¨à¥\8d à¤\85सà¥\8dय à¤ªà¥\81à¤\9fासà¥\8dय à¤¸à¤®à¥\8dपादनमà¥\8d à¤\86रबà¥\8dधवानà¥\8d à¤¤à¤¤à¥\8dपशà¥\8dà¤\9aातà¥\8d à¤\85नà¥\8dयà¤\83 à¤¯à¥\8bà¤\9cà¤\95ः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+       "confirmrecreate": "सदसà¥\8dयà¤\83 [[User:$1|$1]] ([[User talk:$1|समà¥\8dभाषणमà¥\8d]]) à¤¸à¤\95ारणà¤\82 à¤­à¤µà¤¤à¤\83 à¤¸à¤®à¥\8dपादनातà¥\8d à¤ªà¤°à¤\82 à¤ªà¥\81à¤\9fमà¥\87ततà¥\8d à¤\85पमरà¥\8dà¤\9cितमà¥\8d à¥¤ \n: <em>$2</em>\nएतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
+       "confirmrecreate-noreason": "यदा à¤­à¤¾à¤µà¤¾à¤¨à¥\8d à¤\85सà¥\8dय à¤ªà¥\81à¤\9fासà¥\8dय à¤¸à¤®à¥\8dपादनमà¥\8d à¤\86रबà¥\8dधवानà¥\8d à¤¤à¤¤à¥\8dपशà¥\8dà¤\9aातà¥\8d à¤\85नà¥\8dयà¤\83 à¤¸à¤¦à¤¸à¥\8dयः [[User:$1|$1]] ([[User talk:$1|talk]]) एतत् अपनीतवान् । अतः एतत्पुटं पुनर्निमातुम् इच्छति वेति दृढयतु ।",
        "recreate": "पुनर्निर्मीयताम्",
        "confirm_purge_button": "अस्तु",
        "confirm-purge-top": "अस्य पुटस्य इतिहाससङ्ग्रहं निर्मलं करोति वा ?",
index f81d91e..177b334 100644 (file)
@@ -4,32 +4,33 @@
                        "Aursani",
                        "아라",
                        "Fayazburiro",
-                       "Sindhu"
+                       "Sindhu",
+                       "Mehtab ahmed"
                ]
        },
-       "tog-underline": "هيٺان ڏنل لڪير واري لنڪ",
-       "tog-hideminor": "تازÙ\8aÙ\88Ù\86 Ù\86Ù\86Ú\8dÙ\8aÙ\88Ù\86 تبدليون لڪايو",
+       "tog-underline": "ڳنڍڻي هيٺان لڪير:",
+       "tog-hideminor": "تازÙ\8aÙ\88Ù\86 Ù\85عÙ\85Ù\88Ù\84Ù\8a تبدليون لڪايو",
        "tog-hidepatrolled": "تازيون گھميل تبديليون لڪايو",
-       "tog-newpageshidepatrolled": "نئين صفحن تان تازي گھميل صفحي جي لسٽ لڪايو",
-       "tog-numberheadings": "خودڪار نمبرن واري هيڊنگ",
-       "tog-showtoolbar": "اÙ\8aÚ\8aÙ½ Ø¨ار ڏيکاريو",
-       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪيو",
-       "tog-watchcreations": "Ù\85Ù\86Ù\87Ù\86جا Ø³Ø±Ø¬Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù\86Ù\87ار فهرست ۾ رکو",
-       "tog-watchdefault": "Ù\85Ù\86Ù\87Ù\86جا ØªØ±Ù\85Ù\8aÙ\85Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù\86Ù\87ار فهرست تي رکو",
+       "tog-newpageshidepatrolled": "نَوَن صفحن واري فهرست مان تازو گھميل صفحا لڪايو",
+       "tog-numberheadings": "خودڪار نمبرن واريون سُرخيون",
+       "tog-showtoolbar": "سÙ\86Ù\88ار Ø§Ù\88زار ڏيکاريو",
+       "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا ايڊت ڪريو",
+       "tog-watchcreations": "Ù\85Ù\86Ù\87Ù\86جا Ø³Ø±Ø¬Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ فهرست ۾ رکو",
+       "tog-watchdefault": "Ù\85Ù\86Ù\87Ù\86جا ØªØ±Ù\85Ù\8aÙ\85Ù\8aÙ\84 ØµÙ\81حا Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ فهرست تي رکو",
        "tog-watchdeletion": "آئون جيڪي صفحا ڊاهيان، سي منهنجي ٽيٽ فهرست تي رکو",
        "tog-watchrollback": "انهن صفحن کي منهنجي ٽيٽ فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
-       "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهه ڏيکاريو",
-       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهه ڏيکاريو",
+       "tog-previewontop": "ترميمي باڪس مٿان پيش نگاهہ ڏيکاريو",
+       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهہ ڏيکاريو",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
        "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
        "tog-shownumberswatching": "ٽيٽيندڙ يوزرس جو تعداد ڏيکاريو",
        "tog-oldsig": "موجوده دستخط",
        "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون ٽيٽ فهرست ۾ نہ ڏيکاريو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
-       "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نه ڏيکاريو",
+       "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نہ ڏيکاريو",
        "tog-showhiddencats": "لڪل زمرا ڏيکاريو",
-       "underline-always": "هميشه",
-       "underline-never": "ڪڏهن به نه",
+       "underline-always": "هميشہ",
+       "underline-never": "ڪڏهن بہ نہ",
        "sunday": "آچر",
        "monday": "سومر",
        "tuesday": "اڱارو",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "category-media-header": " \"$1\" زمري اندر ذريعات",
-       "category-empty": "''في الوقت هن زمري ۾ ڪي به صفحا يا ذريعات شامل ناهن.''",
+       "category-empty": "''في‌الوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.''",
        "hidden-categories": "{{PLURAL:$1|لڪيل زمرو|لڪيل زمرا}}",
        "hidden-category-category": "لڪل زمرا",
+       "category-subcat-count": "{{PLURAL:$2|هن ذمري ۾ رڳو هيٺيون ذيلي ذمرو آهي.|هن ذمري ۾ ڪل $2 مان هيٺيان {{PLURAL:$1|subcategory|$1 ذيلي ذمرا}} آهن.}}",
        "listingcontinuesabbrev": "جاري..",
        "about": "بابت",
-       "article": "مسوَدو",
-       "newwindow": "(نئين کڙڪيءَ ۾ کلندو)",
+       "article": "موادي صفحو",
+       "newwindow": "(نئين دريءَ ۾ کلندو)",
        "cancel": "رد",
        "moredotdotdot": "اڃا...",
        "mypage": "منهنجو صفحو",
-       "mytalk": "ڳاله ٻوله",
+       "mytalk": "ڳالهہ ٻولہ",
        "navigation": "رهنمائي",
-       "and": "&#32;۽",
+       "and": "&#32؛۽",
        "qbfind": "ڳوليو",
        "qbbrowse": "جھانگيو",
        "qbedit": "سنواريو",
        "faq": "ڪپوس",
        "faqpage": "Project:ڪپوس",
        "namespaces": "نانءُ پولار:",
-       "variants": "اÙ\82ساÙ\85",
+       "variants": "بÙ\8eدÙ\8eÙ\84Ù\8e",
        "navigation-heading": "رهنما مينيو",
        "errorpagetitle": "چُڪَ",
        "returnto": "$1 ڏانهن وَرو.",
        "permalink": "مسقتل ڳنڍڻو",
        "print": "ڇاپيو",
        "view": "نگاهہ",
+       "view-foreign": "$1 تي ڏسو",
        "edit": "سنواريو",
-       "edit-local": "مقامي وضاحت کي ترميميو",
+       "edit-local": "مقامي تشريح کي ترميميو",
        "create": "سرجيو",
+       "create-local": "مقامي تشريح ڏيو",
        "editthispage": "هيءُ صفحو سنواريو",
        "create-this-page": "اهو صفحو نئين سر جوڙيو",
        "delete": "ڊاھيو",
        "protect": "تحفظيو",
        "protect_change": "تبديل ڪريو",
        "protectthispage": "هيءُ صفحو تحفظيو",
-       "unprotect": "Ø­Ù\81اظت Ù\85Ù½يو",
-       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\8a Ø­Ù\81اظت Ù\85Ù½يو",
+       "unprotect": "تحÙ\81ظ Ø¨Ø¯Ù\84ايو",
+       "unprotectthispage": "Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø¬Ù\88 ØªØ­Ù\81ظ Ø¨Ø¯Ù\84ايو",
        "newpage": "نئون صفحو",
        "talkpage": "هن صفحي تي بحث ڪريو",
        "talkpagelinktext": "بحث",
        "otherlanguages": "ٻين ٻولين ۾",
        "redirectedfrom": "($1 کان چوريل)",
        "redirectpagesub": "چوريل صفحو",
-       "redirectto": "منتقل ڪيو",
+       "redirectto": "ڏانهن چوريو",
        "lastmodifiedat": "هيءُ صفحو آخري ڀيرو $2، $1ع تي ترميميو ويو هو.",
        "viewcount": "هيءُ صفحو {{PLURAL:$1|دفعو|$1 دفعا}} ڏسجي چڪو آهي.",
        "protectedpage": "تحفظيل صفحو",
        "site-atom-feed": "$1 اڻو روان رسد",
        "page-rss-feed": "\"$1\" RSS برق مواد",
        "page-atom-feed": "\"$1\" اڻو روان رسد",
-       "red-link-title": "$1 (صفحو وجود نه ٿو رکي)",
+       "red-link-title": "$1 (صفحو وجود نہ ٿو رکي)",
        "nstab-main": "صفحو",
        "nstab-user": "تعارفي صفحو",
        "nstab-media": "ذريعاتي صفحو",
        "nstab-template": "سانچو",
        "nstab-help": "امدادي صفحو",
        "nstab-category": "زمرو",
-       "nosuchspecialpage": "اهڙو ڪو به خاص صفحو ناهي",
+       "nosuchspecialpage": "اهڙو ڪو بہ خاص صفحو ناهي",
        "error": "چُڪَ",
        "databaseerror": "اعدادخاني ۾ چڪ",
        "readonly": "اعدادخانو بنديل",
        "missingarticle-diff": "(تفاوت: $1، $2)",
        "internalerror": "اندروني خرابي",
        "internalerror_info": "داخلي چُڪَ: $1",
-       "filerenameerror": "\"$1\" نالي فائيل تي نئون نالو \"$2\" رکجي نه سگھجو.",
-       "filedeleteerror": "\"$1\" فائيل ڊهي نه سگھيو.",
-       "filenotfound": "\"$1\" نالي فائيل لڀجي نه سگھيو.",
+       "filerenameerror": "\"$1\" نالي فائيل تي نئون نالو \"$2\" رکجي نہ سگھجو.",
+       "filedeleteerror": "\"$1\" فائيل ڊهي نہ سگھيو.",
+       "filenotfound": "\"$1\" نالي فائيل لڀجي نہ سگھيو.",
        "unexpected": "غير متوقع قدر: \"$1\"=\"$2\".",
        "badtitle": "غيردرست عنوان",
+       "badtitletext": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود آهن، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.",
        "viewsource": "ڪوڊ ڏسو",
        "protectedpagetext": "هيءُ صفحو ترميمن کان تحفظيل آهي.",
        "viewsourcetext": "توهان هن صفحي جو ڪوڊ ڏسي ۽ نقل ڪري سگھو ٿا:",
        "namespaceprotected": "توهان کي نانءُ پولار '''$1''' جا صفحا سنوارڻ جا اختيار ناهن.",
        "ns-specialprotected": "خاص صفحا سنواري نٿا سگھجن.",
        "yourname": "يُوزرنانءُ:",
+       "userlogin-yourname": "يوزرنانءُ",
+       "userlogin-yourname-ph": "پنهنجو يوزرنانءُ ڄاڻايو",
        "yourpassword": "ڳجھو لفظ:",
+       "userlogin-yourpassword": "ڳجھو لفظ",
+       "userlogin-yourpassword-ph": "پنهنجو ڳجھو لفظ ڄاڻايو",
+       "createacct-yourpassword-ph": "ڳجھو لفظ داخل ڪريو",
+       "createacct-yourpasswordagain": "ڳجھي لفظ جي خاطري ڪريو",
+       "createacct-yourpasswordagain-ph": "ٻيهر ڳجھو لفظ داخل ڪريو",
        "remembermypassword": "هن ڳڻپيوڪر تي مون کي ياد رکو (for a maximum of $1 {{PLURAL:$1|day|days}})",
+       "userlogin-remembermypassword": "مون کي لاگ اِن رهڻ ڏيو",
        "login": "لاگ اِن",
        "nav-login-createaccount": "لاگ اِن ٿيو / کاتو کوليو",
        "userlogin": "لاگ اِن ٿيو / کاتو کوليو",
        "logout": "لاگ آئوٽ",
        "userlogout": "لاگ آئوٽ",
+       "userlogin-noaccount": "کاتو نہ ٿا رکو؟",
+       "userlogin-joinproject": "{{SITENAME}} ۾ شامل ٿيو",
        "nologin": "پنهنجو کاتو نه ٿا رکو؟ '''$1'''.",
        "nologinlink": "نئون کاتو کوليو",
        "createaccount": "کاتو کوليو",
        "gotaccount": "ڇا اڳي ئي کاتو رکو ٿا؟ '''$1'''.",
        "gotaccountlink": "لاگ اِن",
+       "userlogin-resetpassword-link": "ڳجھو لفظ وساري ويٺا آهيو؟",
+       "userlogin-helplink2": "لاگ اِن ٿيڻ لاءِ مدد",
+       "createacct-emailoptional": "برق ٽپال پتو (مرضيءَ موجب)",
+       "createacct-email-ph": "پنهنجو برق ٽپال پتو ڄاڻايو",
        "createaccountmail": "بذريعه برق ٽپال",
+       "createacct-captcha": "حفاظتي روڪ",
+       "createacct-imgcaptcha-ph": "مٿي ظاهر ٿيندڙ ٽيڪسٽ ٽائيپ ڪريو",
+       "createacct-submit": "پنهنجو کاتو کوليو",
+       "createacct-benefit-heading": "{{SITENAME}} توهان جهڙن سڄڻن ٺاهيو آهي.",
+       "createacct-benefit-body1": "{{PLURAL:$1|ترميم|ترميمون}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
+       "createacct-benefit-body3": "حاليہ $1 ڀاڱيدار",
        "loginsuccesstitle": "لاگ اِن ڪامياب",
        "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" لاگ اِن ٿيل آهيو.'''",
        "nosuchuser": "\"$1\" نالي سان ڪو به يوزر نه آهي. هِجي چڪاسيو، يا نئون کاتو کوليو.",
-       "nosuchusershort": "\"$1\" نالي ڪو به يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
+       "nosuchusershort": "\"$1\" نالي ڪو بہ يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
        "nouserspecified": "توهان کي ڪو يوزرنانءُ ڄاڻائڻو پوندو.",
        "wrongpassword": "ڏنل ڳجھو لفظ غير درست آهي. مهرباني ڪري ٻيهر ڪوشش ڪندا.",
        "wrongpasswordempty": "ڏنل ڳجھو لفظ خالي هو. مهرباني ڪري وري ڪوشش ڪندا.",
        "acct_creation_throttle_hit": "معاف ڪجَو، اوهان اڳي ئي $1 کاتا کولي چڪا آهيو. ان کان وڌيڪ نه ٿا کولي سگھجن.",
        "accountcreated": "کاتو کلي چڪو",
        "accountcreatedtext": "$1 نالي يوزر کاتو کلي چڪو آھي.",
+       "loginlanguagelabel": "ٻولي: $1",
        "pt-login": "لاگ ان ٿيو",
+       "pt-login-button": "لاگ اِن",
        "pt-createaccount": "کاتو کوليو",
+       "pt-userlogout": "لاگ آئوٽ",
        "changepassword": "ڳجھو لفظ تبديل ڪريو",
        "retypenew": "نئون ڳجھو لفظ ٻيهر ٽائيپ ڪندا:",
+       "passwordreset": "ڳجھو لفظ مَٽايو",
+       "changeemail-passwordrequired": "توهانکي هن تبديلي جي تصديق ڪرڻ جي لاءِ پنهنجو ڳجھو لفظ داخل ڪرڻ جي ضرورت پوندي.",
        "bold_sample": "گهري تحرير",
        "bold_tip": "گهري لکت",
        "italic_sample": "ترڇي لکت",
        "extlink_tip": "خارجي ڳنڍڻو (اڳياڙي http://  نه وساريندا)",
        "headline_sample": "سرخي",
        "headline_tip": "سطح 2 جي سرخي",
+       "nowiki_tip": "وڪي فارميٽڱ کي نظرانداز ڪريو",
        "image_tip": "جَڙيل فائيل",
        "media_tip": "فائيل جو ڳنڍڻو",
        "sig_tip": "توهان جي صحيح بمع اوقاتي مهر",
        "hr_tip": "افقي لڪير (غيرضروري استعمال کان پاسو ڪندا)",
        "summary": "تَتُ:",
-       "subject": "موضوع/سُرخي:",
+       "subject": "موضوع:",
        "minoredit": "هيءَ هڪ معمولي ترميم آهي",
        "watchthis": "هيءُ صفحو سانڍيو",
        "savearticle": "صفحو سانڍيو",
-       "preview": "پيش نگاهه",
-       "showpreview": "پيش نگاهه",
+       "preview": "پيش نگاهہ",
+       "showpreview": "پيش نگاهہ",
        "showdiff": "تبديليون ڏيکاريو",
-       "anoneditwarning": "'''خبردار:''' توهان لاگ اِن ٿيل ناهيو.\nهن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو.",
+       "anoneditwarning": "<strong>خبردار:</strong> توهان لاگ اِن ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 لاگ اِن]</strong> ٿيو ٿا <strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سن منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
        "missingcommenttext": "براءِ مهرباني هيٺ پنهنجا تاثرات درج ڪندا.",
        "summary-preview": "تت تي پيش نگاهه:",
+       "subject-preview": "موضوع جو مشاهدو:",
        "blockedtitle": "يُوزر بندشيل آهي.",
        "blockedtext": "'''توهان جي يوزرنانءُ يا آءِ پي کي بندشيو ويو آهي.'''\n\nبندش $1 هنئي. جڏهن ته ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاهڙي روڪ تي بحث ڪرڻ لاءِ توهان $1 يا ڪنهن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توهان جو درست [[Special:ترجيحات|کاتو ترجيحات]] ۾ درست برق ٽپال پتو درج ٿيل نه آهي ته توهان 'هن يوزر کي برق ٽپال ڪريو' وارو فيچر نه ٿا \nYou cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nاستعمال ڪري سگھو. توهان جو هاڻوڪو آءِ پي پتو $3 آهي، ۽ بندش سڃاڻپ $5 آهي. مهرباني ڪري ڪنهن به پڇا ڳاڇا يا لهوچڙ  لاءِ انهن مان ڪنهن هڪ يا ٻنهي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
+       "loginreqlink": "لاگ اِن",
        "accmailtitle": "ڳجھو لفظ اماڻجي چڪو.",
        "newarticle": "(نئون)",
        "newarticletext": "توهان اهڙي صفحي جو ڳنڍڻو وٺي هتي پهتا آهيو، جيڪو اڃا وجود نه ٿو رکي. اهڙو صفحو جوڙڻ لاءِ هيٺين باڪس ۾ ٽائيپ ڪرڻ شروع ڪريو (وڌيڪ ڄاڻڻ لاءِ [$1 امدادي صفحو] ڏسندا). جي توهان هتي غلطيءَ ۾ اچي ويا آهيو ته رڳو پنهنجي جهانگُوءَ جو '''back''' بٽڻ ڪلڪ ڪندا.",
+       "noarticletext": "في‌الوقت هن صفحي اندر ڪو بہ ٽيڪسٽ نہ آهي. توهان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|search ساڳي عنوان جي ڳولا]] ڪري سگھو ٿا.  \n\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ۾ ڳوليو]،\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} هيءُ صفحو ترميميو]</span>.",
        "previewnote": "'''هيءَ محظ پيش نگاهه آهي، ترميمون اڃا سانڍجون ناهن!'''",
        "editing": "زير ترميم $1",
+       "creating": "$1 سرجيندي",
        "editingsection": "زير ترميم $1 (سيڪشن)",
        "copyrightwarning": "ياد رکندا ته {{SITENAME}} لاءِ سموريون ڀاڱيداريون $2 تحت پڌريون ڪجن ٿيون (تفصيلن لاءِ $1 ڏسندا). اوهان جي تحرير کي {{SITENAME}} جي قائدن تحت ترميمي سگهجي ٿو. جيڪڏهن اوهان نه ٿا چاهيو ته اوهان جي لکڻين کي بي رحميءَ سان ترميميو وڃي يا ورهائي عام ڪيو وڃي ته پوءِ پنهنجي لکڻي هتي جمع نه ڪرايو. پنهنجو مواد هتي جمع ڪرڻ جو مطلب هوندو ته توهان کي جمع ڪرايل مواد جي مفت فراهمي ۽ کُليل تبديليءَ تي ڪو به اعتراز ناهي.<br />\nتوهان اهڙي پڪ ڏيڻ جا پابند پڻ آهيو ته توهان جو جمع ڪرايل مواد توهان جو پنهنجو لکيل آهي يا وري توهان ڪنهن مفت وسيلي تان ڪاپي ڪيو آهي.\n'''تحفظيل حق ۽ واسطا رکندڙ مواد واسطيدار مالڪ کان اڳواٽ اجازت وٺڻ کان سواءِ هتي جمع نه ڪريو.'''",
-       "templatesused": "هن صفحي تي استعمال ٿيندڙ سانچا:",
+       "templatesused": "هن صفحي تي استعمال ٿيندڙ {{PLURAL:$1|سانچو|سانچا}}:",
        "templatesusedpreview": "هن پيش نگاهه ۾ استعمال ٿيل سانچا:",
        "template-protected": "(تحفظيل)",
        "template-semiprotected": "(نيم تحفظيل)",
+       "hiddencategories": "هيءُ صفحو  {{PLURAL:$1|1 لڪل زمري|$1 لڪل زمرن}}: جو رڪن آهي:",
        "nocreatetext": "{{SITENAME}} نوان صفحا سرجڻ جي روڪَ ڪئي آهي.\nتوهان اڳي ئي موجود صفحن کي سنواري سگھو ٿا، يا [[Special:UserLogin|لاگ اِن ٿي يا نئون کاتو کولي سگھو ٿا]].",
+       "permissionserrorstext-withaction": "هيٺين {{PLURAL:$1|سبب|سببن}} ڪري، توهان کي $2 جي اجازت ڪانهي.",
        "recreate-moveddeleted-warn": "'''خبردار: توهان اهڙو صفحو نئين سر سرجي رهيا آهيو جيڪو اڳي ڊاٺو ويو آهي.'''\n\nبهتر ٿيندو ته توهان سوچي وٺو ته ڇا ان صفحي کي سنوارڻ بهتر ٿيندو.\nتوهآن جي سهوليت خاطر هتي ان صفحي جو ڊاٺ لاگ ميسر ڪجي ٿو:",
+       "moveddeleted-notice": "هيءُ صفحو ڊهي چڪو آهي. \nحوالي طور ڊاٺ ۽ چور لاگ هيٺ ڏجي ٿو.",
        "duplicate-args-warning": "وارننگ: [[:$2]]کي [[:$1]] ڪال ڪري رهيو آهي، ساڻ هڪ کان وڌيڪ قدرن لاءِ ’$3‘ پيراميٽرس لاءِ. فقط آخري قدر مهيا ڪيل استعمال ڪيو ويندو.",
        "viewpagelogs": "هن صفحي جا لاگ ڏسو",
        "currentrev": "هاڻوڪو مسودو",
+       "currentrev-asof": "$1 جو تازو ترين مسودو",
        "revisionasof": "$1 وارو پرت",
-       "revision-info": "$1 تي $2 جي ترميم بعد مسودو",
+       "revision-info": "$1 تي {{GENDER:$6|$2}}$7 جي ترميم بعد مسودو",
        "previousrevision": "←اڃا پراڻو پرت",
        "nextrevision": "اڃا نئون پرت→",
        "currentrevisionlink": "هاڻوڪو پرت",
        "historyempty": "(خالي)",
        "history-feed-item-nocomment": "$2 تي $1",
        "pagehist": "صفحي جي سوانح",
-       "history-title": "\"$1\" جي سوانح",
+       "history-title": "\"$1\" جي ترميمي سوانح",
+       "difference-title": "\"$1\" جي مسودن ۾ تفاوت",
        "lineno": "سِٽَ $1:",
        "compareselectedversions": "چونڊيل پرت ڀيٽيو",
        "editundo": "اڻڪريو",
        "searchresults-title": "”$1“ لاءِ ڳولا نتيجا",
        "prevn": "پويان {{PLURAL:$1|$1}}",
        "nextn": "اڳيان {{PLURAL:$1|$1}}",
+       "nextn-title": "{{PLURAL:$1|ٻيو|ٻيا}} $1 {{PLURAL:$1|نتيجو|نتيجا}}",
+       "shown-title": "$1 {{PLURAL:$1|نتيجو|نتيجا}} في صفحو ڏيکاريو",
        "viewprevnext": "ڏسو ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles": "موادي صفحا",
+       "searchprofile-images": "گھڻذريعات",
+       "searchprofile-everything": "هر شَي",
+       "searchprofile-advanced": "متقدم",
+       "searchprofile-articles-tooltip": "$1 ۾ ڳوليو",
+       "searchprofile-images-tooltip": "فائيلن جي ڳولا",
+       "searchprofile-everything-tooltip": "سموري مواد ۾ ڳوليو",
+       "searchprofile-advanced-tooltip": "مرضيءَ جي نانءُپولارن ۾ ڳوليو",
        "search-result-size": "$1 ({{PLURAL:$2|لفظُ|$2 لفظَ}})",
+       "search-redirect": "($1 کي چوريو)",
+       "search-section": "(سيڪشن $1)",
+       "search-suggest": "ڇا توهان جو مطلب $1 آهي؟",
+       "searchall": "سڀ",
+       "search-nonefound": "توهان جي ڳولا جي نتيجي ۾ ڪجھہ بہ ڪو نہ لڌو.",
        "preferences": "ترجيحات",
-       "mypreferences": "منهنجون ترجيحات",
-       "skin-preview": "پيش نگاهه",
+       "mypreferences": "ترجيحات",
+       "skin-preview": "پيش نگاهہ",
        "datedefault": "بلا ترجيحا",
        "allowemail": "ٻين يُوزرس کان ايندڙ برق ٽپال بحال ڪريو",
        "yourrealname": "اصل نالو:",
        "group-user": "يوزرس",
        "grouppage-sysop": "{{ns:project}}:منتظمين",
        "right-undelete": "ڪو صفحو اڻڊاهيو",
+       "newuserlogpage": "يوزر کاتن جو لاگ",
        "rightslog": "يُوزر حق لاگ",
        "nchanges": "$1 {{PLURAL:$1|تبديلي|تبديليون}}",
+       "enhancedrc-history": "سوانح",
        "recentchanges": "تازيون تبديليون",
+       "recentchanges-legend": "تازين تبديلين جو آپشن",
+       "recentchanges-summary": "هن صفحي تي وڪيءَ ۾ ڪيل تازيون ترين ترميمون ڏيکاريو.",
        "recentchanges-feed-description": "ۡهن روان رسد ۾ آيل تازيون تبديليون لهو",
+       "recentchanges-label-newpage": "هن ترميم سان نئون صفحو جڙيو.",
+       "recentchanges-label-minor": "هيءُ هڪ معمولي ترميم آهي.",
+       "recentchanges-label-bot": "هيءُ ترميم بوٽ عمل ۾ آندي.",
+       "recentchanges-label-plusminus": "هن صفحي جي ماپ ۾ هيترين ٻاٺڻين جو ڦير آيو آهي",
        "rcnotefrom": "هيٺ '''$2''' کان ٿيندڙ تبديليون پيش ڪجن ٿيون ('''$1''' تائين ڏيکارجن ٿيون).",
        "rclistfrom": "$3 $2 کان شروع ٿيندڙ نيون تبديليون",
        "rcshowhideminor": "$1 معمولي ترميمون",
+       "rcshowhideminor-show": "نمايو",
+       "rcshowhideminor-hide": "لڪايو",
        "rcshowhidebots": "$1 بوٽس",
-       "rcshowhideliu": "$1 لاگ اِن ٿيل يوزرس",
+       "rcshowhidebots-show": "نمايو",
+       "rcshowhidebots-hide": "لڪايو",
+       "rcshowhideliu": "$1 کاتيدار يوزرس",
+       "rcshowhideliu-hide": "لڪايو",
        "rcshowhideanons": "$1 نامعلوم يُوزرس",
+       "rcshowhideanons-show": "نمايو",
+       "rcshowhideanons-hide": "لڪايو",
        "rcshowhidepatr": "$1 تاڻيل ترميمون",
        "rcshowhidemine": "منهنجون ترميمون $1",
+       "rcshowhidemine-show": "نمايو",
+       "rcshowhidemine-hide": "لڪايو",
        "rclinks": "پوين $2 ڏينهن ۾ آيل پويون $1 تبديليون ڏيکاريو <br />$3",
        "diff": "تفاوت",
        "hist": "سوانح",
        "recentchangeslinked-feed": "لاڳاپيل تبديليون",
        "recentchangeslinked-toolbox": "لاڳاپيل تبديليون",
        "recentchangeslinked-title": "\"$1\" سان لاڳاپيل تبديليون",
+       "recentchangeslinked-page": "صفحي جو عنوان",
+       "recentchangeslinked-to": "رڳو ڄاڻايل صفحي سان ڳانڍيل صفحن ۾ ٿيل تبديليون نمايو",
        "upload": "فائيل چاڙهيو",
        "uploadbtn": "فائيل چاڙهيو",
-       "uploadlogpage": "چاڙهه لاگ",
+       "uploadlogpage": "چاڙهہ لاگ",
+       "filedesc": "خلاصو",
        "upload-scripted-pi-callback": "ان فائيل کي اپلوڊ نه ٿو ڪري سگهي جنهن ۾ ايڪس ايم ايل اسٽائيل شيٽ جون پراسيسنگ هدايتون شامل هجن.",
        "uploaded-script-svg": "اسڪرپٽ جوڳو ايليمينٽ ”$1” مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-hostile-svg": "اپلوڊ ٿيل ايس وي جي فائيل جو غير محفوظ سي ايس ايس ۾ اسٽائيل ايلمينٽ مليو",
        "uploaded-setting-handler-svg": "اهي ايس وي جي جيڪي ”هينڊل ڪندڙ“ وصفن کي رموٽ/ڊيٽا/اسڪرپٽ کي سيٽ ٿا ڪن، کي بلاڪ ڪيو ويو آهي.<code>$1=\"$2\"</code> مليو آهي اپلوڊ ٿيل ايس وي جي فائيل ۾.",
        "uploaded-remote-url-svg": "ايس وي جي جيڪا سيٽ ڪري ٿي ڪنهن اسٽائيل وصف  رموٽ يو آر ايل سان  بلاڪ ٿيل آهي.\n <code>$1=\"$2\"</code> اپلوڊ ٿيل ايس وي جي فائيل ۾ مليو",
        "uploaded-image-filter-svg": "هن يو آر ايل سان <code>&lt;$1 $2=\"$3\"&gt;</code> اميج فلٽر مليو آهي، اپلوڊ ٿيل ايس وي جي فائيل ۾،",
+       "license-header": "لائيسنسڪاري",
+       "imgfile": "فائيل",
        "listfiles": "فائيل فهرست",
        "file-anchor-link": "فائيل",
        "filehist": "فائيل جي سوانح",
        "filehist-help": "ڪنهن به تاريخ/وقت تي ڪلڪ ڪري ڏسندا ته تڏڻي اهو فائيل ڪيئن هو.",
        "filehist-current": "هاڻوڪو",
        "filehist-datetime": "تاريخ/وقت",
+       "filehist-thumb": "آڱوٺي ننهن",
        "filehist-user": "يُوزر",
        "filehist-dimensions": "ماپَ",
        "filehist-filesize": "فائيل سائيز",
        "nolinkstoimage": "هن فائيل سان ڪو به صفحو ڳنڍيل ناهي.",
        "sharedupload": "هيءَ هڪ شراڪتي چاڙهه آهي، تنهنڪري ان کي ٻيون رٿائون به استعمال ڪري سگھن ٿيون.",
        "uploadnewversion-linktext": "هن فائيل جو نئون پرت چاڙهيو",
+       "upload-disallowed-here": "توهان هن فائيل مٿان لکي نہ ٿا سگھو.",
        "mimesearch": "مائيم ڳولا",
        "listredirects": "چورڻن جي فهرست",
        "unusedtemplates": "اڻ استعماليل سانچا",
        "brokenredirects": "ٽٽل چورڻا",
        "brokenredirects-edit": "سنواريو",
        "brokenredirects-delete": "ڊاهيو",
-       "withoutinterwiki": "ڪنهن به ٻي ٻوليءَ سان نه ڳنڍيل صفحا",
+       "withoutinterwiki": "ڪنهن بہ ٻي ٻوليءَ سان نہ ڳنڍيل صفحا",
        "fewestrevisions": "گھٽانگھٽ ترميميل صفحا",
        "nbytes": "$1 {{PLURAL:$1|ٻاٽڻ|ٻاٽڻيون}}",
        "nlinks": "$1 {{PLURAL:$1|ڳنڍڻو|ڳنڍڻا}}",
        "ancientpages": "قديم ترين صفحا",
        "move": "چوريو",
        "movethispage": "هيءُ صفحو چوريو",
+       "pager-older-n": "{{PLURAL:$1|پراڻو 1|پراڻا $1}}",
        "booksources": "ڪتابي وسيلا",
+       "booksources-search-legend": "ڪتابي ذريعن جي ڳولا ڪريو",
+       "booksources-search": "ڳوليو",
        "specialloguserlabel": "يُوزر:",
        "speciallogtitlelabel": "عنوان:",
        "log": "لاگس",
        "categories": "زمرا",
        "emailuser": "هن يوزر کي برق ٽپال اماڻيو",
        "watchlist": "منهنجي ٽيٽ فهرست",
-       "mywatchlist": "Ù\85Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست",
+       "mywatchlist": "ٽيٽ فهرست",
        "addedwatchtext": "صفحو بعنوان \"[[:$1]]\" اوهان جي [[Special:Watchlist|ٽيٽ فهرست]] ۾ شامل ٿي ويو. استقبالي تبديليون هتي درج ٿينديون وينديون. اهو صفحو [[Special:RecentChanges|تازين تبديلين]] واري صفحي تي '''گهرن''' اکرن ۾ نمايان ڪري ڏيکاريو ويندو. جيڪڏهن اوهان اهو سڀ نه ٿا چاهيو ته '''اڻ ٽيٽيو''' تي ڪلڪ ڪريو.",
        "removedwatchtext": "صفحو بعنوان \"[[:$1]]\" توهان جي ٽيٽ فهرست مان هٽي چڪو آهي.",
        "watch": "ٽيٽيو",
        "deleteotherreason": "اڃا ڪو ٻيو سبب:",
        "deletereasonotherlist": "ٻيو سبب",
        "rollbacklink": "واپس ورايو",
+       "rollbacklinkcount": "اڻ ڪريو $1 {{PLURAL:$1|ترميم|ترميمون}}",
        "protectlogpage": "تحفظ لاگ",
        "prot_1movedto2": "[[$1]] کي چوري [[$2]] تي رکيو ويو",
        "protect-legend": "تحفظڻ جي پڪ ڪريو",
        "undelete-error-short": "هيءُ فائيل اڻڊاهيندي چُڪَ ٿي آهي: $1",
        "namespace": "نانءُ پولار:",
        "invert": "چونڊ ابتيو",
+       "namespace_association": "منسلڪ نانءُپولار",
        "blanknamespace": "(مُک)",
-       "contributions": "يوزر جون ڀاڱيداريون",
-       "mycontris": "منهنجون ڀاڱيداريون",
+       "contributions": "{{GENDER:$1|يوزر}} جون ڀاڱيداريون",
+       "mycontris": "ڀاڱيداريون",
        "contribsub2": "براءِ $1 ($2)",
        "uctop": "(سِرُ)",
        "month": "مهينو (۽ اڳوڻيون):",
        "sp-contributions-talk": "بحث",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "whatlinkshere-title": "$1 سان ڳنڍيل صفحا",
+       "whatlinkshere-page": "صفحو:",
        "linkshere": "هيٺيان صفحا '''[[:$1]]''' سان ڳنڍيل آهن:",
-       "nolinkshere": "'''[[:$1]]''' سان ڪو به صفحو ڳنڍيل ناهي.",
+       "nolinkshere": "'''[[:$1]]''' سان ڪو بہ صفحو ڳنڍيل ناهي.",
        "isredirect": "چورڻو صفحو",
        "istemplate": "شموليت",
+       "isimage": "فائيل جو ڳنڍڻو",
        "whatlinkshere-prev": "{{PLURAL:$1|پويون|پويون $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|اڳيون|اڳيان $1}}",
        "whatlinkshere-links": "← ڳنڍڻا",
+       "whatlinkshere-hideredirs": "$1 چورجي ٿو",
+       "whatlinkshere-hidelinks": "$1 ڳنڍڻا",
+       "whatlinkshere-filters": "ڇاڻيون",
        "blockip": "يُوزر کي روڪيو",
        "ipboptions": "2 ڪلاڪ:2 hours،1 ڏينهن:1 day،3 ڏينهن:3 days،1 هفتو:1 week،2 هفتا:2 weeks،1 مهينو:1 month،3 مهينا:3 months،6 مهينا:6 months،1 سال:1 year،لامحدود:infinite",
        "badipaddress": "ناقابلڪار آءِ پي پتو",
        "block-log-flags-anononly": "فقط نامعلوم يوزرس",
        "movepagetext": "هيٺيون فارم استعمال ڪندي ڪنهن صفحي کي نئون عنوان ڏئي سگھجي ٿو، جنهن سان سمورو صفحو نئين عنوان ڏانهن هليو ويندو. اڳوڻو عنوان نئين عنوان ڏانهن چورڻو بنجي ويندو. ان ڳالهه جي پڪ ڪرڻ ذميواري توهان تي آهي ته ڳنڍڻا اتي ئي وٺي وڃن ٿا جتي انهن کي وٺي وڃڻ گھرجي.\n\nياد رکندا ته جيڪڏهن نئين عنوان سان اڳي ئي ڪو مضمون موجود آهي ته پوءِ صفحو '''نه''' چوريو ويندو، سوا ان جي ته موجوده صفحو محظ خالي آهي يا ڪا به سوانح نه رکندڙ ڪو چورڻو آهي.\n\n'''خبردار!'''\nاها هڪ مقبول صفحي لاءِ ڪا غير متوقه ۽ انتهائي اڻوڻندڙ تبديلي ثابت ٿي سگھي ٿي؛ براءِ مهرباني اڳتي وڌڻ کان اڳ پڪ ڪندا ته توهان اها تبديلي آڻڻ جي نتيجن کان چڱيءَ ريت واقف آهيو.",
        "movepagetalktext": "واسطيدار مباحثي صفحو پاڻهي ئي چوريو ويندو ماهسوا:\n\n*نئين عنوان سان هڪ اڻ پورو يعني غير خالي مباحثي صفحو اڳي ئي وجود رکندو هجي، يا\n*توهان هيٺين باڪس کي اڻ ٽِڪ ڪريو\n\nانهن صورتن ۾، جيڪڏهن توهان چاهيو ته صفحي کي پاڻ چوري يا ضمائي سگھو ٿا.",
-       "movearticle": "صفحو چوريو:",
        "newtitle": "نئين عنوان ڏانهن:",
        "move-watch": "هيءُ صفحو ٽيٽيو",
        "movepagebtn": "صفحو چوريو",
        "allmessagescurrent": "موجوده تحرير",
        "thumbnail-more": "وڏو ڪريو",
        "importlogpage": "درآمد لاگ",
-       "tooltip-pt-userpage": "منهنجو تعارفي صفحو",
-       "tooltip-pt-mytalk": "منهنجو مباحثي صفحو",
+       "tooltip-pt-userpage": "توهان جو تعارفي صفحو",
+       "tooltip-pt-mytalk": "توهان جو مباحثي صفحو",
        "tooltip-pt-preferences": "منهنجون ترجيحات",
        "tooltip-pt-watchlist": "توهان جي ٽيٽ فهرست ۾ شامل صفحا",
-       "tooltip-pt-mycontris": "منهنجون ڀاڱيداريون",
-       "tooltip-pt-login": "توهان کي همٿائجي ٿو ته توهان لاگ اِن ٿيو، بهرحال اهو لازمي ناهي.",
+       "tooltip-pt-mycontris": "توهان جون ڀاڱيداريون",
+       "tooltip-pt-login": "توهان کي همٿائجي ٿو تہ توهان لاگ اِن ٿيو، بهرحال اهو لازمي نہ آهي.",
        "tooltip-pt-logout": "لاگ آئوٽ",
        "tooltip-pt-createaccount": "توهان جي همٿ افزائي ڪئي وئي آهي ته هڪ کاتو کوليو ۽ لاگ ان ٿيو؛ جيتوڻيڪ، اهو ضروري نه آهي",
        "tooltip-ca-talk": "موادي صفحي تي بحث",
-       "tooltip-ca-edit": "توهان هيءُ صفحو سنواري سگھو ٿا. مهرباني ڪري سانڍڻ کان اڳ پيش نگاهه جو اختيار استعمال ڪندا.",
-       "tooltip-ca-addsection": "Ù\87Ù\86 Ø¨Ø­Ø« ØªÙ\8a ØªØ§Ø«Ø±Ø§Øª Ø¯Ø±Ø¬ ÚªØ±Ø§يو",
+       "tooltip-ca-edit": "هيءُ صفحو سنواريو",
+       "tooltip-ca-addsection": "Ù\86ئÙ\88Ù\86 Ø³Ù\8aڪشÙ\86 Ø´Ø±Ù\88ع ÚªØ±يو",
        "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي. توهان ان جو ڪوڊ ڏسي سگھو ٿا.",
        "tooltip-ca-history": "هن صفحي جون گذريل نظرثانيون",
        "tooltip-ca-protect": "هيءُ صفحو تحفظيو",
        "tooltip-ca-watch": "هيءُ صفحو پنهنجي ٽيٽ فهرست ۾ شامل ڪريو",
        "tooltip-ca-unwatch": "هيءُ صفحو پنهنجي ٽيٽ فهرست مان هٽايو",
        "tooltip-search": "جھڙتيو {{SITENAME}}",
-       "tooltip-search-go": "صفحي تي وڃو بلڪل هن ساڳئي نالي سان جيڪڏهن موجود آهي ته",
+       "tooltip-search-go": "صفحي تي وڃو بلڪل هن ساڳئي نالي سان جيڪڏهن موجود آهي تہ",
        "tooltip-search-fulltext": "هن متن لاءِ صفحا ڳوليو",
-       "tooltip-p-logo": "مکيه صفحو وزٽ ڪريو",
+       "tooltip-p-logo": "مک صفحو وزٽ ڪريو",
        "tooltip-n-mainpage": "مک صفحو گھمو",
        "tooltip-n-mainpage-description": "مکيه صفحو وزٽ ڪريو",
        "tooltip-n-portal": "هن رٿا بابت، توهان ڇا ٿا ڪري سگھو، ڪهڙي شَي ڪٿي ملندي",
        "tooltip-n-randompage": "بلاترتيب ڪو به صفحو اتاريو",
        "tooltip-n-help": "ڳولي لهڻ جي جاءِ.",
        "tooltip-t-whatlinkshere": "هتان ڳنڍيل سمورا وڪي صفحا",
-       "tooltip-t-recentchangeslinked": "Ù\88Ù\8aجھÚ\99ائÙ\8aØ¡Ù\8e Û¾ ØµÙ\81Ø­Ù\86 Û¾ Ù¿Ù\8aÙ\84 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ù\87Ù\86 ØµÙ\81Ø­Ù\8a ØªØ§Ù\86 Ú³Ù\86Ú\8dÙ\8aÙ\84 Ù\8aا Ù\84Ù\86Úª Ù¿يل آهن",
+       "tooltip-t-recentchangeslinked": "Ù\88Ù\8aجھÚ\99ائÙ\8aØ¡Ù\8e Û¾ ØµÙ\81Ø­Ù\86 Û¾ Ù¿Ù\8aÙ\84 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ù\87Ù\86 ØµÙ\81Ø­Ù\8a Ø³Ø§Ù\86 Ú³Ù\86Ú\8dيل آهن",
        "tooltip-t-contributions": "هن يُوزر جون ڀاڱيداريون ڏسو",
        "tooltip-t-emailuser": "هن يُوزر کي برق ٽپال اماڻيو",
        "tooltip-t-upload": "فائيل چاڙهيو",
        "tooltip-t-specialpages": "سڀني خاص صفحن جي فهرست",
        "tooltip-t-print": "هن صفحي جو ڇاپائتو پرت",
-       "tooltip-t-permalink": "صفحي جي هن نظرثاليءَ ڏانهن مستقل لنڪ",
+       "tooltip-t-permalink": "صفحي جي ان نظرثاليءَ ڏانهن مستقل ڳنڍڻو",
        "tooltip-ca-nstab-main": "مواد جي صفحي کي ڏسو",
        "tooltip-ca-nstab-user": "هن جو يُوزر صفحو ڏسو",
-       "tooltip-ca-nstab-special": "هي خاص صفحو آهي، توهان هن صفحي کي ترميم نه ٿا ڪري سگهو.",
+       "tooltip-ca-nstab-special": "هيءُ خاص صفحو آهي، ان ۾ ترميم ڪري نہ ٿي سگھجي.",
        "tooltip-ca-nstab-project": "رٿائي صفحو ڏسو",
        "tooltip-ca-nstab-image": "هن فائيل جو صفحو ڏسو",
        "tooltip-ca-nstab-template": "سانچو ڏسو",
        "tooltip-diff": "پنهنجون ڪيل تبديليون ڏسو.",
        "tooltip-compareselectedversions": "هن صفحي جن ٻن چونڊيل پرتن درميان تفاوت ڏسو.",
        "tooltip-watch": "هيءُ صفحو پنهنجي ٽيٽ فهرست ۾ شامل ڪريو",
+       "tooltip-rollback": "هن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم (ترميمن) کي هڪ ڪلڪ سان اڻ ڪريو.",
+       "tooltip-summary": "ننڍو خلاصو ڏيو",
        "anonymous": "{{SITENAME}} جا نامعلوم يوزرس",
        "pageinfo-toolboxlink": "صفحي جي معلومات",
-       "previousdiff": "â\86\90 Ø§Ú³Ù\88Ú»Ù\88 ØªÙ\81اÙ\88ت",
-       "nextdiff": "Ù\86ئÙ\88Ù\86 ØªÙ\81اÙ\88ت -->",
+       "previousdiff": "â\86\90 Ø§Ú³Ù\88Ú»Ù\8a ØªØ±Ù\85Ù\8aÙ\85",
+       "nextdiff": "Ù\86ئÙ\8aÙ\86 ØªØ±Ù\85Ù\8aÙ\85-->",
        "file-info-size": "$1 × $2 عڪسلون، فائيل سائيز: $3، MIME ٽائيپ: $4",
        "file-nohires": "اڃا سنهو تحلل ميسر ناهي.",
        "svg-long-desc": "ايس وي جي فائيل، اٽڪل $1 × $2 عڪسلون، فائيل سائيز: $3",
-       "show-big-image": "سنهو ترين تحلل",
+       "show-big-image": "اصلوڪو فائيل",
+       "show-big-image-preview": "هن پيش نگاهہ جي ماپ: $1",
+       "show-big-image-other": "ٻيا {{PLURAL:$2|تحلل}}:$1",
        "show-big-image-size": "$1*$2 پڪزلس",
        "newimages": "نون فائيلن جي گيلري",
-       "noimages": "ڏسڻ لاءِ ڪجھه ناهي.",
+       "noimages": "ڏسڻ لاءِ ڪجھہ ناهي.",
        "bydate": "تاريخوار",
        "metadata": "اعدادِ اعداد",
        "metadata-expand": "توسيعي تفصيل ڏيکاريو",
        "exif-xresolution": "افقي تحلل",
        "exif-yresolution": "عمودي تحلل",
        "exif-stripoffsets": "عڪسي اعداد جي مڪانيت",
+       "exif-datetime": "فائيل ۾ تبديليءَ جي تاريخ ۽ وقت",
        "exif-imagedescription": "عڪس عنوان",
+       "exif-model": "ڪيميرا ماڊل",
+       "exif-software": "مستعمل منتقگري",
+       "exif-colorspace": "رنگ پولار",
+       "exif-datetimeoriginal": "اعداد جي جڙڻ جي تاريخ ۽ وقت",
+       "exif-datetimedigitized": "عددڪاريءَ جي تاريخ ۽ وقت",
        "exif-saturation": "رچاءُ",
        "exif-gpslatitude": "ويڪرائي ڦاڪَ",
        "exif-gpslongituderef": "اڀرندي يا الهندي ڊگھائي ڦاڪَ",
        "exif-gpslongitude": "ڊگھائي ڦاڪَ",
        "exif-gpstrack": "چرپر جو طرف",
        "exif-unknowndate": "نامعلوم تاريخ",
+       "exif-orientation-1": "نارمل",
        "exif-orientation-3": "180° موڙيل",
        "exif-componentsconfiguration-0": "وجود نه ٿو رکي",
        "exif-lightsource-0": "نامعلوم",
        "exif-focalplaneresolutionunit-2": "انچ",
        "exif-scenecapturetype-0": "معياري",
        "exif-subjectdistancerange-0": "نامعلوم",
-       "exif-subjectdistancerange-3": "ڏورانهين نگاهه",
+       "exif-subjectdistancerange-3": "ڏورانهين نگاهہ",
        "exif-gpslatitude-s": "ڏاکڻي ويڪرائي ڦاڪَ",
-       "exif-gpslongitude-e": "اÚ\80رÙ\86دÙ\8a ڊگھائي ڦاڪَ",
+       "exif-gpslongitude-e": "اÚ\80رÙ\8aÙ\86 ڊگھائي ڦاڪَ",
        "exif-gpsmeasuremode-2": "2-رخي ماپ",
        "exif-gpsmeasuremode-3": "3-رخي ماپ",
        "exif-gpsspeed-k": "ڪلوميٽر في ڪلاڪ",
        "exif-gpsspeed-m": "ميل في ڪلاڪ",
-       "exif-gpsspeed-n": "ڳنڍيون",
+       "exif-gpsspeed-n": "ناٽس",
        "namespacesall": "سڀ",
        "monthsall": "سڀ",
        "confirmemail_success": "توھان جي برق ٽپال جي پڪ ڪئي وئي آھي. ھاڻِ توھان لاگ ان ٿي وڪيءَ جو مزو وٺي سگھو ٿا",
-       "recreate": "ورسجيو",
+       "recreate": "Ù\88رسرجÙ\8aÙ\88",
        "watchlisttools-view": "لاڳاپيل تبديليون ڏسو",
        "watchlisttools-edit": "ٽيٽ فهرست ڏسو ۽ سنواريو",
        "watchlisttools-raw": "ڪچي ٽيٽ فهرست سنواريو",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ڳالهہ]])",
        "version": "ورزن",
        "specialpages": "خاص صفحا",
        "specialpages-group-users": "يوزرس ۽ حق",
+       "tag-filter": "[[Special:Tags|ٽيگ]] ڇاڻيون:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٽيگ|ٽيگز}}]]: $2)",
-       "searchsuggest-search": "ڳوليو"
+       "logentry-delete-delete": "$1 {{GENDER:$2|ڊاٺو}} صفحو $3",
+       "logentry-newusers-create": "يوزر کاتو $1 {{GENDER:$2|جوڙيو ويو}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|چاڙهيو}} $3",
+       "searchsuggest-search": "ڳوليو",
+       "api-error-blacklisted": "براءِ مهرباني هڪ مختلف، وضاحتي عنوان چونڊيو."
 }
index 6d83b6a..3983006 100644 (file)
        "otherlanguages": "Drugi jezici / Други језици",
        "redirectedfrom": "(Preusmjereno sa $1)",
        "redirectpagesub": "Preusmjeri stranicu",
+       "redirectto": "Preusmjerenje na:",
        "lastmodifiedat": "Ova stranica je posljednji put izmijenjena $1, $2.",
        "viewcount": "Ovoj stranici je pristupljeno {{PLURAL:$1|$1 put|$1 puta}}.",
        "protectedpage": "Zaštićena stranica",
        "nstab-template": "Šablon / Шаблон",
        "nstab-help": "Pomoć / Помоћ",
        "nstab-category": "Kategorija / Категорија",
+       "mainpage-nstab": "Glavna stranica / Главна страница",
        "nosuchaction": "Nema takve akcije",
        "nosuchactiontext": "Akcija navedena u URL-u nije valjana.\nMožda ste pogriješili pri unosu URL-a ili ste slijedili pokvaren link.\nMoguće je i da je ovo greška u softveru koji koristi {{SITENAME}}.",
        "nosuchspecialpage": "Nema takve posebne stranice",
        "preview": "Pretpregled / Претпреглед",
        "showpreview": "Pretpregled - Претпреглед",
        "showdiff": "Prikaži izmjene - Прикажи измене",
-       "anoneditwarning": "'''Upozorenje:''' Niste prijavljeni.\nVaša IP adresa će biti zabilježena u historiji ove stranice.",
+       "anoneditwarning": "<strong>Upozorenje:</strong> Niste prijavljeni. \nVaša IP adresa će biti javno vidljiva ako napravite neku izmjenu. Ako se <strong>[$1 prijavite]</strong> ili <strong>[$2 napravite račun]</strong>, vaše izmjene će biti pripisane vašem korisničkom imenu, zajedno sa drugim pogodnostima.",
        "anonpreviewwarning": "''Niste prijavljeni. Vaša IP adresa će biti zabilježena u historiji ove stranice.''",
        "missingsummary": "'''Podsjećanje:''' Niste unijeli sažetak izmjene.\nAko kliknete na Sačuvaj/Snimi, Vaša izmjena će biti snimljena bez sažetka.",
        "missingcommenttext": "Molimo unesite komentar ispod.",
        "currentrev": "Trenutna revizija",
        "currentrev-asof": "Trenutna revizija na dan $1",
        "revisionasof": "Izmjena od $1",
-       "revision-info": "Trenutna revizija na dan $1",
+       "revision-info": "Izmjena od $1 od {{GENDER:$6|$2}}$7",
        "previousrevision": "← Starija revizija",
        "nextrevision": "Novija izmjena →",
        "currentrevisionlink": "Trenutna verzija",
        "searchall": "sve",
        "showingresults": "Dole {{PLURAL:$1|je prikazan '''1''' rezultat|su prikazana '''$1''' rezultata|je prikazano '''$1''' rezultata}} počev od '''$2'''.",
        "showingresultsinrange": "Ispod {{PLURAL:$1|je prikazan <strong>1</strong> rezultat|su prikazana <strong>$1</strong> rezultata|je prikazano <strong>$1</strong> rezultata}}, u rasponu od <strong>$2</strong> do <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$4|Rezultat <strong>$1</strong> od <strong>$3</strong>|Rezultati <strong>$1 - $2</strong> od <strong>$3</strong>}}",
        "search-nonefound": "Nisu pronađeni rezultati koji odgovaraju upitu.",
        "powersearch-legend": "Napredna pretraga",
        "powersearch-ns": "Pretraga u imenskim prostorima:",
        "querypage-disabled": "Ova posebna stranica je onemogućena jer smanjuje performanse.",
        "booksources": "Književni izvori",
        "booksources-search-legend": "Traži književne izvore",
+       "booksources-search": "Traži",
        "booksources-text": "Ispod se nalazi spisak vanjskih linkova na ostale stranice koje prodaju nove ili korištene knjige kao i stranice koje mogu da imaju važnije podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije validan; molimo da provjerite da li je došlo do greške pri kopiranju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
        "namespace_association": "Povezan imenski prostor",
        "tooltip-namespace_association": "Označite ovu kutiju da također uključite razgovor ili imenski prostor teme koja je povezana sa odabranim imenskim prostorom",
        "blanknamespace": "(Glavno)",
-       "contributions": "Doprinosi korisnika / Доприноси корисника",
+       "contributions": "Doprinosi {{GENDER:$1|korisnika|korisnice|korisnika}}",
        "contributions-title": "Korisnički doprinosi od $1",
        "mycontris": "Doprinosi / Доприноси",
        "contribsub2": "Za $1 ($2)",
        "tooltip-pt-mycontris": "Spisak vaših doprinosa",
        "tooltip-pt-login": "Predlažem da se prijavite; međutim, to nije obavezno",
        "tooltip-pt-logout": "Odjava sa projekta {{SITENAME}}",
+       "tooltip-pt-createaccount": "Ohrabrujemo vas da otvorite račun i prijavite se; to, međutim, nije obavezno",
        "tooltip-ca-talk": "Razgovor o sadržaju stranice",
-       "tooltip-ca-edit": "Možete da uređujete ovu stranicu.\nMolimo da prije snimanja koristite dugme za pretpregled",
+       "tooltip-ca-edit": "Uredi ovu stranicu",
        "tooltip-ca-addsection": "Započnite novu sekciju.",
        "tooltip-ca-viewsource": "Ova stranica je zaštićena.\nMožete vidjeti njen izvor",
        "tooltip-ca-history": "Prethodne verzije ove stranice",
        "tooltip-ca-nstab-main": "Pogledajte sadržaj stranice",
        "tooltip-ca-nstab-user": "Pogledajte korisničku stranicu",
        "tooltip-ca-nstab-media": "Pogledajte medijski fajl",
-       "tooltip-ca-nstab-special": "Ovo je posebna stranica, te je ne možete uređivati",
+       "tooltip-ca-nstab-special": "Ovo je posebna stranica, te se ne može zasebno uređivati",
        "tooltip-ca-nstab-project": "Pogledajte stranicu projekta",
        "tooltip-ca-nstab-image": "Vidi stranicu datoteke/fajla",
        "tooltip-ca-nstab-mediawiki": "Pogledajte sistemsku poruku",
        "spam_reverting": "Vraćanje na zadnju verziju koja ne sadrži linkove ka $1",
        "spam_blanking": "Sve revizije koje sadrže linkove ka $1, očisti",
        "spam_deleting": "Sve izmene sadrže veze do $1. Brišem",
+       "simpleantispam-label": "Provjera protiv spama.\n<strong>NE</strong> popunjavajte ovo!",
        "pageinfo-title": "Informacije za \"$1\"",
        "pageinfo-not-current": "Na žalost, nemoguće je pribaviti ove podatke za starije izmjene.",
        "pageinfo-header-basic": "Osnovne informacije",
        "svg-long-desc": "SVG fajl, nominalno $1 × $2 piksela, veličina fajla: $3",
        "svg-long-desc-animated": "Animirana SVG datoteka, nominalno: $1 × $2 piksela, veličina: $3",
        "svg-long-error": "Nevaljana SVG datoteka: $1",
-       "show-big-image": "Puna rezolucija",
+       "show-big-image": "Izvorna datoteka",
        "show-big-image-preview": "Veličina ovog prikaza: $1.",
        "show-big-image-other": "{{PLURAL:$2|Druga rezolucija|Druge rezolucije}}: $1.",
        "show-big-image-size": "$1 × $2 piksela",
        "logentry-rights-rights": "$1 je {{GENDER:$2|promijenio|promijenila|promijenio}} članstvo grupe za $3 iz $4 u $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|je promijenio|je promijenila|je promijenio}} članstvo grupe za $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|je automatski unaprijeđen|je automatski unaprijeđena}} iz $4 u $5",
+       "logentry-upload-upload": "$1 {{GENDER:$2|postavio|postavila}} je $3",
        "rightsnone": "(nema)",
        "revdelete-summary": "sažetak izmjene",
        "feedback-adding": "Dodajem povratne informacije na stranicu...",
index 0b00bdc..86f0d2b 100644 (file)
        "prefs-help-recentchangescount": "Vključuje zadnje spremembe, zgodovine strani in dnevniške zapise.",
        "prefs-help-watchlist-token2": "To je skrivni ključ do spletnega vira vašega spiska nadzorov. Kdor ve zanj, lahko bere vaš spisek nadzorov, zato ključa ne delite. [[Special:ResetTokens|Kliknite tukaj, če ga želite ponastaviti]].",
        "savedprefs": "Spremembe smo uspešno shranili.",
+       "savedrights": "Uporabniške pravice {{GENDER:$1|$1}} smo shranili.",
        "timezonelegend": "Časovni pas",
        "localtime": "Krajevni čas:",
        "timezoneuseserverdefault": "Uporabi privzeti wiki čas ($1)",
        "upload-dialog-button-done": "Končano",
        "upload-dialog-button-save": "Shrani",
        "upload-dialog-button-upload": "Naloži",
-       "upload-process-error": "Prišlo je do napake",
-       "upload-process-warning": "Pojavilo se je opozorilo",
        "upload-form-label-select-file": "Izberi datoteko",
        "upload-form-label-infoform-title": "Podrobnosti",
        "upload-form-label-infoform-name": "Ime",
index 874b020..4fda64f 100644 (file)
        "clearyourcache": "''Shënim:''' Pas ruajtjes, juve mund t'iu duhet të anashkaloni \"cache-in\" e shfletuesit tuaj për të parë ndryshimet. \n* '''Firefox / Safari:''' Mbaj të shtypur ''Shift'' ndërkohë që klikon ''Reload'', ose shtyp ''Ctrl-F5'' ose ''Ctrl-R'' (''⌘-R'' në Mac)\n* '''Google Chrome:''' Shtyp ''Ctrl-Shift-R'' (''''⌘-R'''' në Mac)\n* '''Internet Explorer:''' Mbaj të shtypur ''Ctrl''  ndërkohë që klikon ''Refresh'', ose shtyp ''Ctrl-F5''\n* '''Konqueror:''' Kliko ''Reload'' ose shtyp ''F5''\n* '''Opera:''' Zbrazni \"cache-in\" tek ''Tools → Preferences''",
        "usercssyoucanpreview": "'''Këshillë:''' Përdorni butonin '{{int:showpreview}}' për të testuar CSS-në e re para se të ruani ndryshimet e kryera.",
        "userjsyoucanpreview": "'''Këshillë:''' Përdorni butonin '{{int:showpreview}}' për të testuar JavaScripting e ri para se të ruani ndryshimet e kryera.",
-       "usercsspreview": "'''Vini re! Ju jeni duke inspektuar CSS-në si përdorues!'''\n'''Nuk është ruajtur ende!'''",
+       "usercsspreview": "<strong>Vini re! Ju jeni duke inspektuar CSS-në si përdorues!\nNuk është ruajtur ende!</strong>",
        "userjspreview": "'''Vini re se kjo është vetëm një provë ose parapamje e faqes tuaj JavaScript, ajo nuk është ruajtur akoma!'''",
-       "sitecsspreview": "'''Vini re! Ju jeni duke inspektuar CSS-në !'''\n'''Nuk është ruajtur ende!'''",
-       "sitejspreview": "'''Vini re! Ju jeni duke inspektuar këtë kod JavaScript.''' \n'''Nuk është ruajtur ende!'''",
+       "sitecsspreview": "<strong>Vini re! Ju jeni duke inspektuar CSS-në!\nNuk është ruajtur ende!</strong>",
+       "sitejspreview": "<strong>Vini re! Ju jeni duke inspektuar këtë kod JavaScript. \nNuk është ruajtur ende!</strong>",
        "userinvalidcssjstitle": "'''Kujdes:''' Nuk ka pamje të quajtur \"$1\". Vini re se faqet .css dhe .js përdorin titull me gërma të vogla, p.sh. {{ns:user}}:Foo/vector.css, jo {{ns:user}}:Foo/Vector.css.",
        "updated": "(E ndryshuar)",
        "note": "'''Shënim:'''",
        "upload-dialog-button-done": "Mbyll",
        "upload-dialog-button-save": "Ruaj",
        "upload-dialog-button-upload": "Ngarko",
-       "upload-process-error": "Një gabim ka ndodhur",
        "backend-fail-stream": "Nuk mund të kalojë skedën $1.",
        "backend-fail-backup": "Nuk mund të rezervojë skedën $1.",
        "backend-fail-notexists": "Skeda $1 nuk ekziston.",
        "backend-fail-closetemp": "Nuk mund të mbyllë skedën e përkohshme.",
        "backend-fail-read": "Nuk mund të lexojë skedën $1.",
        "backend-fail-create": "Nuk mund të krijojë skedën $1.",
-       "backend-fail-maxsize": "Nuk mund të shkruante skedarin \"$1\" sepse ai është më i madh se {{SHUMËS:$2|një bajt|$2 bajtë}}",
+       "backend-fail-maxsize": "Nuk mund të shkruante skedarin \"$1\" sepse ai është më i madh se {{PLURAL:$2|një bajt|$2 bajtë}}",
        "backend-fail-readonly": "Shërbimi i depos \"$1\" është për momentin vetëm-për-lexim. Arsyeja e dhënë është: \"''$2''\"",
        "backend-fail-synced": "Skedari \"$1\" është në një gjendje të parregullt brenda proceseve të depos së brendshme",
        "backend-fail-connect": "Nuk u arrit lidhja me shërbimin e depos \"$1\".",
        "watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} nën mbikqyrje duke mos numëruar faqet e diskutimit.",
        "wlheader-enotif": "Njoftimi me email është lejuar.",
        "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
-       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLUARAL:$2:orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
+       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLURAL:$2|orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
        "wlshowlast": "Trego $1 orët $2 ditët",
        "watchlist-options": "Mundësitë e listës mbikqyrëse",
        "watching": "Duke mbikqyrur...",
        "blockipsuccesssub": "Bllokimi u bë me sukses",
        "blockipsuccesstext": "Përdoruesi/IP-Adresa [[Special:Contributions/$1|$1]] u bllokua.<br />\nShiko te [[Special:BlockList|Lista e përdoruesve dhe e IP adresave të bllokuara]] për të çbllokuar Përdorues/IP.",
        "ipb-blockingself": "Ju jeni duke bllokuar vetëveten ! Jeni te sigurte qe doni te bëni këtë?",
-       "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues me \"përdorues të fshehur\" të aktivizuar. Kjo do të shtypur emrin e përdoruesit në të gjitha listat dhe aktivitetet hyrëse. Jeni te sigurte qe doni ta bëni këtë ?",
+       "ipb-confirmhideuser": "Ju jeni gati për të bllokuar një përdorues që ka aktivizuar statusin \"përdorues i fshehur\". Kjo do të shtyp emrin e përdoruesit në të gjitha listat regjistrimet. Jeni të sigurtë që doni ta bëni këtë?",
        "ipb-edit-dropdown": "Redakto arsyet e bllokimit",
        "ipb-unblock-addr": "Zhblloko $1",
        "ipb-unblock": "Çblloko përdorues dhe IP të bllokuara",
index c34372f..3dd5dec 100644 (file)
        "prefs-help-recentchangescount": "Подразумева скорашње измене, историје страница и дневнике.",
        "prefs-help-watchlist-token2": "Ово је тајни кључ за веб-довод Вашег списка надгледања. \nСвако ко зна овај кључ биће у могућности да види Ваша надгледања; стога, кључ немојте одавати никоме. \nАко је потребно, кључ можете [[Special:ResetTokens|ресетовати]].",
        "savedprefs": "Ваша подешавања су сачувана.",
+       "savedrights": "Корисничка права за {{GENDER:$1|$1}} су сачувана.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
        "timezoneuseserverdefault": "подразумеване вредности ($1)",
        "booksources-text": "Испод се налази списак веза ка сајтовима који се баве продајом нових и половних књига, а који би могли имати додатне податке о књигама које тражите:",
        "booksources-invalid-isbn": "Наведени ISBN број није исправан. Проверите да није дошло до грешке при умножавању из првобитног извора.",
        "specialloguserlabel": "Извршилац:",
-       "speciallogtitlelabel": "Циљ (наслов или корисник):",
+       "speciallogtitlelabel": "Циљ (наслов или {{ns:user}}:корисничко име):",
        "log": "Дневници",
        "all-logs-page": "Сви јавни дневници",
        "alllogstext": "Скупни приказ свих доступних историја овог викија.\nМожете сузити приказ одабирући врсту историје, корисничког имена или тражене странице.",
        "svg-long-error": "Неисправна SVG датотека: $1",
        "show-big-image": "Пуна величина",
        "show-big-image-preview": "Величина овог приказа: $1.",
+       "show-big-image-preview-differ": "Величина овог $3 прегледа за ову $2 датотеку је $1.",
        "show-big-image-other": "{{PLURAL:$2|Друга резолуција|Друге резолуције}}: $1.",
        "show-big-image-size": "$1 × $2 пиксела",
        "file-info-gif-looped": "петља",
index 4ba6ffc..5d1dabc 100644 (file)
        "booksources-text": "Ispod se nalazi spisak veza ka sajtovima koji se bave prodajom novih i polovnih knjiga, a koji bi mogli imati dodatne podatke o knjigama koje tražite:",
        "booksources-invalid-isbn": "Navedeni ISBN broj nije ispravan. Proverite da nije došlo do greške pri umnožavanju iz prvobitnog izvora.",
        "specialloguserlabel": "Izvršilac:",
-       "speciallogtitlelabel": "Cilj (naslov ili korisnik):",
+       "speciallogtitlelabel": "Cilj (naslov ili {{ns:user}}:korisničko ime):",
        "log": "Dnevnici",
        "all-logs-page": "Svi javni dnevnici",
        "alllogstext": "Skupni prikaz svih dostupnih istorija ovog vikija.\nMožete suziti prikaz odabirući vrstu istorije, korisničkog imena ili tražene stranice.",
index 1c631ec..c820091 100644 (file)
        "sig_tip": "Din signatur med tidsstämpel",
        "hr_tip": "Horisontell linje (använd sparsamt)",
        "summary": "Sammanfattning:",
-       "subject": "Ämne/rubrik:",
+       "subject": "Ämne:",
        "minoredit": "Mindre ändring (m)",
        "watchthis": "Bevaka denna sida",
        "savearticle": "Spara sidan",
        "missingsummary": "<strong>Påminnelse:</strong> Du har inte skrivit någon redigeringskommentar.\nOm du klickar på \"{{int:savearticle}}\" igen kommer din redigering att sparas utan en sådan.",
        "selfredirect": "<strong>Varning:</strong> Du omdirigerar denna sida till sig själv.\nDu kanske angav fel mål för din omdirigering, eller redigerar fel sida.\nOm du klickar på \"{{int:savearticle}}\" igen kommer omdirigeringen att skapas trots detta.",
        "missingcommenttext": "Var god och skriv in en kommentar nedan.",
-       "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne/rubrik för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
+       "missingcommentheader": "<strong>Påminnelse:</strong> Du har inte skrivit något ämne för den här kommentaren.\nOm du trycker på \"{{int:savearticle}}\" igen kommer din redigering sparas utan rubrik.",
        "summary-preview": "Förhandsgranskning av sammanfattning:",
        "subject-preview": "Rubrikförhandsgranskning:",
        "previewerrortext": "Ett fel uppstod när dina ändringar skulle förhandsgranskas.",
        "prefs-help-recentchangescount": "Detta inkluderar senaste ändringarna, sidhistorik och loggar.",
        "prefs-help-watchlist-token2": "Detta är den hemliga nyckeln till webbflödet i din bevakningslista.\nNågon som vet den kommer att kunna läsa din bevakningslista, så dela inte ut den.\n[[Special:ResetTokens|Klicka här om du behöver återställa den]].",
        "savedprefs": "Dina inställningar har sparats",
+       "savedrights": "Användarrättigheterna för {{GENDER:$1|$1}} har sparats.",
        "timezonelegend": "Tidszon:",
        "localtime": "Lokal tid:",
        "timezoneuseserverdefault": "Använd wikins standard ($1)",
        "upload-dialog-button-done": "Klar",
        "upload-dialog-button-save": "Spara",
        "upload-dialog-button-upload": "Ladda upp",
-       "upload-process-error": "Ett fel uppstod",
-       "upload-process-warning": "En varning uppstod",
        "upload-form-label-select-file": "Välj fil",
        "upload-form-label-infoform-title": "Detaljer",
        "upload-form-label-infoform-name": "Namn",
        "svg-long-error": "Felaktig SVG-fil: $1",
        "show-big-image": "Originalfil",
        "show-big-image-preview": "Storlek på förhandsvisningen: $1.",
+       "show-big-image-preview-differ": "Storleken för denna $3-förhandsvisning av denna $2-fil: $1.",
        "show-big-image-other": "{{PLURAL:$2|Annan upplösning|Andra upplösningar}}: $1.",
        "show-big-image-size": "$1 × $2 pixlar",
        "file-info-gif-looped": "upprepad",
index 3e406c9..3ac1f1e 100644 (file)
        "upload-dialog-button-done": "เสร็จสิ้น",
        "upload-dialog-button-save": "บันทึก",
        "upload-dialog-button-upload": "อัปโหลด",
-       "upload-process-error": "เกิดข้อผิดพลาด",
-       "upload-process-warning": "เกิดคำเตือน",
        "upload-form-label-select-file": "เลือกไฟล์",
        "upload-form-label-infoform-title": "รายละเอียด",
        "upload-form-label-infoform-name": "ชื่อ",
index 6676160..a623dcb 100644 (file)
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зберегти",
        "upload-dialog-button-upload": "Завантажити",
-       "upload-process-error": "Сталася помилка",
-       "upload-process-warning": "З'явилось попередження",
        "upload-form-label-select-file": "Обрати файл",
        "upload-form-label-infoform-title": "Деталі",
        "upload-form-label-infoform-name": "Назва",
index 7ce35cd..8703ea8 100644 (file)
        "upload-dialog-button-done": "Xong",
        "upload-dialog-button-save": "Lưu",
        "upload-dialog-button-upload": "Tải lên",
-       "upload-process-error": "Đã xuất hiện lỗi",
-       "upload-process-warning": "Đã xuất hiện cảnh báo",
        "upload-form-label-select-file": "Chọn tập tin",
        "upload-form-label-infoform-title": "Chi tiết",
        "upload-form-label-infoform-name": "Tên",
index ec163d9..c2e8c96 100644 (file)
        "upload-dialog-button-done": "ערליידיקט",
        "upload-dialog-button-save": "אויפֿהיטן",
        "upload-dialog-button-upload": "אַרויפֿלאָדן",
-       "upload-process-error": "א גרײַז האט פאסירט",
-       "upload-process-warning": "א ווארענונג האט פאסירט",
        "upload-form-label-select-file": "קלויבן טעקע",
        "upload-form-label-infoform-title": "פרטים",
        "upload-form-label-infoform-name": "נאָמען",
index 17c8519..a5ecc20 100644 (file)
        "upload-dialog-button-done": "完成",
        "upload-dialog-button-save": "保存",
        "upload-dialog-button-upload": "上传",
-       "upload-process-error": "发生错误",
-       "upload-process-warning": "发生一条警告",
        "upload-form-label-select-file": "选择文件",
        "upload-form-label-infoform-title": "详细信息",
        "upload-form-label-infoform-name": "名称",
index efa51b1..94b1513 100644 (file)
        "upload-dialog-button-done": "完成",
        "upload-dialog-button-save": "儲存",
        "upload-dialog-button-upload": "上傳",
-       "upload-process-error": "發生錯誤",
-       "upload-process-warning": "發生警告",
        "upload-form-label-select-file": "選擇檔案",
        "upload-form-label-infoform-title": "詳細資訊",
        "upload-form-label-infoform-name": "名稱",
        "import-mapping-namespace": "匯入至命名空間:",
        "import-mapping-subpage": "匯入做為以下頁面的子頁面:",
        "import-upload-filename": "檔案名稱:",
-       "import-comment": "è©\95è«\96:",
+       "import-comment": "註解:",
        "importtext": "請使用 [[Special:Export|匯出工具]] 從來源 Wiki 匯出檔案,\n儲存至您的電腦後再上傳到這裡。",
        "importstart": "正在匯入頁面...",
        "import-revision-count": "$1 個修訂",
index 11a0590..0ed584c 100644 (file)
@@ -699,7 +699,6 @@ class TextPassDumper extends BackupDumper {
                $this->progress( "Spawning database subprocess: $cmd" );
                $this->spawnProc = proc_open( $cmd, $spec, $pipes );
                if ( !$this->spawnProc ) {
-                       // shit
                        $this->progress( "Subprocess spawn failed." );
 
                        return false;
index 4ab57d4..5924c66 100755 (executable)
@@ -1,9 +1,13 @@
 #!/usr/bin/env python
 # -*- coding: utf-8 -*-
 # @author Philip
-import tarfile as tf
-import zipfile as zf
-import os, re, shutil, sys, platform
+import os
+import platform
+import re
+import shutil
+import sys
+import tarfile
+import zipfile
 
 pyversion = platform.python_version()
 islinux = platform.system().lower() == 'linux'
@@ -18,16 +22,18 @@ if pyversion[:3] in ['2.6', '2.7']:
             if i < 0x10000:
                 return _unichr(i)
             else:
-                return _unichr( 0xD7C0 + ( i>>10 ) ) + _unichr( 0xDC00 + ( i & 0x3FF ) )
+                return _unichr(0xD7C0 + (i >> 10)) + _unichr(0xDC00 + (i & 0x3FF))
 elif pyversion[:2] == '3.':
     import urllib.request as urllib_request
     unichr = chr
 
-def unichr2( *args ):
-    return [unichr( int( i.split('<')[0][2:], 16 ) ) for i in args]
 
-def unichr3( *args ):
-    return [unichr( int( i[2:7], 16 ) ) for i in args if i[2:7]]
+def unichr2(*args):
+    return [unichr(int(i.split('<')[0][2:], 16)) for i in args]
+
+
+def unichr3(*args):
+    return [unichr(int(i[2:7], 16)) for i in args if i[2:7]]
 
 # DEFINE
 UNIHAN_VER = '6.3.0'
@@ -37,189 +43,201 @@ SCIM_PINYIN_VER = '0.5.92'
 LIBTABE_VER = '0.2.3'
 # END OF DEFINE
 
-def download( url, dest ):
-    if os.path.isfile( dest ):
-        print( 'File %s is up to date.' % dest )
+
+def download(url, dest):
+    if os.path.isfile(dest):
+        print('File %s is up to date.' % dest)
         return
     global islinux
     if islinux:
-        # we use wget instead urlretrieve under Linux, 
+        # we use wget instead urlretrieve under Linux,
         # because wget could display details like download progress
-        os.system( 'wget %s -O %s' % ( url, dest ) )
+        os.system('wget %s -O %s' % (url, dest))
     else:
-        print( 'Downloading from [%s] ...' % url )
-        urllib_request.urlretrieve( url, dest )
-        print( 'Download complete.\n' )
+        print('Downloading from [%s] ...' % url)
+        urllib_request.urlretrieve(url, dest)
+        print('Download complete.\n')
     return
 
-def uncompress( fp, member, encoding = 'U8' ):
-    name = member.rsplit( '/', 1 )[-1]
-    print( 'Extracting %s ...' % name )
-    fp.extract( member )
-    shutil.move( member, name )
+
+def uncompress(fp, member, encoding='U8'):
+    name = member.rsplit('/', 1)[-1]
+    print('Extracting %s ...' % name)
+    fp.extract(member)
+    shutil.move(member, name)
     if '/' in member:
-        shutil.rmtree( member.split( '/', 1 )[0] )
+        shutil.rmtree(member.split('/', 1)[0])
     if pyversion[:1] in ['2']:
-        fc = open( name, 'rb', encoding, 'ignore' )
+        fc = open(name, 'rb', encoding, 'ignore')
     else:
-        fc = open( name, 'r', encoding = encoding, errors = 'ignore' )
+        fc = open(name, 'r', encoding=encoding, errors='ignore')
     return fc
 
 unzip = lambda path, member, encoding = 'U8': \
-        uncompress( zf.ZipFile( path ), member, encoding )
+        uncompress(zipfile.ZipFile(path), member, encoding)
 
 untargz = lambda path, member, encoding = 'U8': \
-        uncompress( tf.open( path, 'r:gz' ), member, encoding )
+        uncompress(tarfile.open(path, 'r:gz'), member, encoding)
+
 
-def parserCore( fp, pos, beginmark = None, endmark = None ):
+def parserCore(fp, pos, beginmark=None, endmark=None):
     if beginmark and endmark:
         start = False
-    else: start = True
+    else:
+        start = True
     mlist = set()
     for line in fp:
-        if beginmark and line.startswith( beginmark ):
+        if beginmark and line.startswith(beginmark):
             start = True
             continue
-        elif endmark and line.startswith( endmark ):
+        elif endmark and line.startswith(endmark):
             break
-        if start and not line.startswith( '#' ):
+        if start and not line.startswith('#'):
             elems = line.split()
-            if len( elems ) < 2:
+            if len(elems) < 2:
                 continue
-            elif len( elems[0] ) > 1 and \
-                len( elems[pos] ) > 1: # words only
-                mlist.add( elems[pos] )
+            elif len(elems[0]) > 1 and len(elems[pos]) > 1:  # words only
+                mlist.add(elems[pos])
     return mlist
 
-def tablesParser( path, name ):
+
+def tablesParser(path, name):
     """ Read file from scim-tables and parse it. """
     global SCIM_TABLES_VER
-    src = 'scim-tables-%s/tables/zh/%s' % ( SCIM_TABLES_VER, name )
-    fp = untargz( path, src, 'U8' )
-    return parserCore( fp, 1, 'BEGIN_TABLE', 'END_TABLE' )
+    src = 'scim-tables-%s/tables/zh/%s' % (SCIM_TABLES_VER, name)
+    fp = untargz(path, src, 'U8')
+    return parserCore(fp, 1, 'BEGIN_TABLE', 'END_TABLE')
+
+ezbigParser = lambda path: tablesParser(path, 'EZ-Big.txt.in')
+wubiParser = lambda path: tablesParser(path, 'Wubi.txt.in')
+zrmParser = lambda path: tablesParser(path, 'Ziranma.txt.in')
 
-ezbigParser = lambda path: tablesParser( path, 'EZ-Big.txt.in' )
-wubiParser = lambda path: tablesParser( path, 'Wubi.txt.in' )
-zrmParser = lambda path: tablesParser( path, 'Ziranma.txt.in' )
 
-def phraseParser( path ):
+def phraseParser(path):
     """ Read phrase_lib.txt and parse it. """
     global SCIM_PINYIN_VER
     src = 'scim-pinyin-%s/data/phrase_lib.txt' % SCIM_PINYIN_VER
-    dst = 'phrase_lib.txt'
-    fp = untargz( path, src, 'U8' )
-    return parserCore( fp, 0 )
+    fp = untargz(path, src, 'U8')
+    return parserCore(fp, 0)
 
-def tsiParser( path ):
+
+def tsiParser(path):
     """ Read tsi.src and parse it. """
     src = 'libtabe/tsi-src/tsi.src'
-    dst = 'tsi.src'
-    fp = untargz( path, src, 'big5hkscs' )
-    return parserCore( fp, 0 )
+    fp = untargz(path, src, 'big5hkscs')
+    return parserCore(fp, 0)
+
 
-def unihanParser( path ):
+def unihanParser(path):
     """ Read Unihan_Variants.txt and parse it. """
-    fp = unzip( path, 'Unihan_Variants.txt', 'U8' )
+    fp = unzip(path, 'Unihan_Variants.txt', 'U8')
     t2s = dict()
     s2t = dict()
     for line in fp:
-        if line.startswith( '#' ):
+        if line.startswith('#'):
             continue
         else:
             elems = line.split()
-            if len( elems ) < 3:
+            if len(elems) < 3:
                 continue
-            type = elems.pop( 1 )
-            elems = unichr2( *elems )
+            type = elems.pop(1)
+            elems = unichr2(*elems)
             if type == 'kTraditionalVariant':
                 s2t[elems[0]] = elems[1:]
             elif type == 'kSimplifiedVariant':
                 t2s[elems[0]] = elems[1:]
     fp.close()
-    return ( t2s, s2t )
+    return (t2s, s2t)
 
-def applyExcludes( mlist, path ):
+
+def applyExcludes(mlist, path):
     """ Apply exclude rules from path to mlist. """
     if pyversion[:1] in ['2']:
-        excludes = open( path, 'rb', 'U8' ).read().split()
+        excludes = open(path, 'rb', 'U8').read().split()
     else:
-        excludes = open( path, 'r', encoding = 'U8' ).read().split()
-    excludes = [word.split( '#' )[0].strip() for word in excludes]
-    excludes = '|'.join( excludes )
-    excptn = re.compile( '.*(?:%s).*' % excludes )
-    diff = [mword for mword in mlist if excptn.search( mword )]
-    mlist.difference_update( diff )
+        excludes = open(path, 'r', encoding='U8').read().split()
+    excludes = [word.split('#')[0].strip() for word in excludes]
+    excludes = '|'.join(excludes)
+    excptn = re.compile('.*(?:%s).*' % excludes)
+    diff = [mword for mword in mlist if excptn.search(mword)]
+    mlist.difference_update(diff)
     return mlist
 
-def charManualTable( path ):
-   fp = open( path, 'r', encoding = 'U8' )
-   for line in fp:
-       elems = line.split( '#' )[0].split( '|' )
-       elems = unichr3( *elems )
-       if len( elems ) > 1:
-           yield elems[0], elems[1:]
-        
-def toManyRules( src_table ):
+
+def charManualTable(path):
+    fp = open(path, 'r', encoding='U8')
+    for line in fp:
+        elems = line.split('#')[0].split('|')
+        elems = unichr3(*elems)
+        if len(elems) > 1:
+            yield elems[0], elems[1:]
+
+
+def toManyRules(src_table):
     tomany = set()
     if pyversion[:1] in ['2']:
-        for ( f, t ) in src_table.iteritems():
-            for i in range( 1, len( t ) ):
-                tomany.add( t[i] )
+        for (f, t) in src_table.iteritems():
+            for i in range(1, len(t)):
+                tomany.add(t[i])
     else:
-        for ( f, t ) in src_table.items():
-            for i in range( 1, len( t ) ):
-                tomany.add( t[i] )
+        for (f, t) in src_table.items():
+            for i in range(1, len(t)):
+                tomany.add(t[i])
     return tomany
 
-def removeRules( path, table ):
-    fp = open( path, 'r', encoding = 'U8' )
+
+def removeRules(path, table):
+    fp = open(path, 'r', encoding='U8')
     texc = list()
     for line in fp:
-        elems = line.split( '=>' )
+        elems = line.split('=>')
         f = t = elems[0].strip()
-        if len( elems ) == 2:
+        if len(elems) == 2:
             t = elems[1].strip()
         f = f.strip('"').strip("'")
         t = t.strip('"').strip("'")
         if f:
             try:
-                table.pop( f )
+                table.pop(f)
             except:
                 pass
         if t:
-            texc.append( t )
-    texcptn = re.compile( '^(?:%s)$' % '|'.join( texc ) )
+            texc.append(t)
+    texcptn = re.compile('^(?:%s)$' % '|'.join(texc))
     if pyversion[:1] in ['2']:
         for (tmp_f, tmp_t) in table.copy().iteritems():
-            if texcptn.match( tmp_t ):
-                table.pop( tmp_f )
+            if texcptn.match(tmp_t):
+                table.pop(tmp_f)
     else:
         for (tmp_f, tmp_t) in table.copy().items():
-            if texcptn.match( tmp_t ):
-                table.pop( tmp_f )
+            if texcptn.match(tmp_t):
+                table.pop(tmp_f)
     return table
 
-def customRules( path ):
-    fp = open( path, 'r', encoding = 'U8' )
+
+def customRules(path):
+    fp = open(path, 'r', encoding='U8')
     ret = dict()
     for line in fp:
-        line = line.rstrip( '\r\n' )
+        line = line.rstrip('\r\n')
         if '#' in line:
-            line = line.split( '#' )[0].rstrip()
-        elems = line.split( '\t' )
-        if len( elems ) > 1:
+            line = line.split('#')[0].rstrip()
+        elems = line.split('\t')
+        if len(elems) > 1:
             ret[elems[0]] = elems[1]
     return ret
 
-def dictToSortedList( src_table, pos ):
-    return sorted( src_table.items(), key = lambda m: ( m[pos], m[1 - pos] ) )
 
-def translate( text, conv_table ):
+def dictToSortedList(src_table, pos):
+    return sorted(src_table.items(), key=lambda m: (m[pos], m[1 - pos]))
+
+
+def translate(text, conv_table):
     i = 0
-    while i < len( text ):
-        for j in range( len( text ) - i, 0, -1 ):
+    while i < len(text):
+        for j in range(len(text) - i, 0, -1):
             f = text[i:][:j]
-            t = conv_table.get( f )
+            t = conv_table.get(f)
             if t:
                 text = text[:i] + t + text[i:][j:]
                 i += len(t) - 1
@@ -227,42 +245,44 @@ def translate( text, conv_table ):
         i += 1
     return text
 
-def manualWordsTable( path, conv_table, reconv_table ):
-    fp = open( path, 'r', encoding = 'U8' )
+
+def manualWordsTable(path, conv_table, reconv_table):
+    fp = open(path, 'r', encoding='U8')
     reconv_table = {}
-    wordlist = [line.split( '#' )[0].strip() for line in fp]
-    wordlist = list( set( wordlist ) )
-    wordlist.sort( key = lambda w: ( len(w), w ), reverse = True )
+    wordlist = [line.split('#')[0].strip() for line in fp]
+    wordlist = list(set(wordlist))
+    wordlist.sort(key=lambda w: (len(w), w), reverse=True)
     while wordlist:
         word = wordlist.pop()
-        new_word = translate( word, conv_table )
-        rcv_word = translate( word, reconv_table )
+        new_word = translate(word, conv_table)
+        rcv_word = translate(word, reconv_table)
         if word != rcv_word:
             reconv_table[word] = word
         reconv_table[new_word] = word
     return reconv_table
 
-def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_table ):
-    wordlist = list( src_wordlist )
-    wordlist.sort( key = lambda w: ( len(w), w ), reverse = True )
+
+def defaultWordsTable(src_wordlist, src_tomany, char_conv_table,
+                      char_reconv_table):
+    wordlist = list(src_wordlist)
+    wordlist.sort(key=lambda w: (len(w), w), reverse=True)
     word_conv_table = {}
     word_reconv_table = {}
     conv_table = char_conv_table.copy()
     reconv_table = char_reconv_table.copy()
-    tomanyptn = re.compile( '(?:%s)' % '|'.join( src_tomany ) )
+    tomanyptn = re.compile('(?:%s)' % '|'.join(src_tomany))
     while wordlist:
-        conv_table.update( word_conv_table )
-        reconv_table.update( word_reconv_table )
+        conv_table.update(word_conv_table)
+        reconv_table.update(word_reconv_table)
         word = wordlist.pop()
-        new_word_len = word_len = len( word )
+        new_word_len = word_len = len(word)
         while new_word_len == word_len:
-            add = False
-            test_word = translate( word, reconv_table )
-            new_word = translate( word, conv_table )
-            if not reconv_table.get( new_word ) \
-               and ( test_word != word \
-               or ( tomanyptn.search( word ) \
-               and word != translate( new_word, reconv_table ) ) ):
+            test_word = translate(word, reconv_table)
+            new_word = translate(word, conv_table)
+            if not reconv_table.get(new_word) and \
+               (test_word != word or
+                (tomanyptn.search(word) and
+                 word != translate(new_word, reconv_table))):
                 word_conv_table[word] = new_word
                 word_reconv_table[new_word] = word
             try:
@@ -272,109 +292,117 @@ def defaultWordsTable( src_wordlist, src_tomany, char_conv_table, char_reconv_ta
             new_word_len = len(word)
     return word_reconv_table
 
-def PHPArray( table ):
+
+def PHPArray(table):
     lines = ['\'%s\' => \'%s\',' % (f, t) for (f, t) in table if f and t]
     return '\n'.join(lines)
 
+
 def main():
-    #Get Unihan.zip:
+    # Get Unihan.zip:
     url = 'http://www.unicode.org/Public/%s/ucd/Unihan.zip' % UNIHAN_VER
     han_dest = 'Unihan-%s.zip' % UNIHAN_VER
-    download( url, han_dest )
-    
+    download(url, han_dest)
+
+    sfurlbase = 'http://%s.dl.sourceforge.net/sourceforge/' % SF_MIRROR
+
     # Get scim-tables-$(SCIM_TABLES_VER).tar.gz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-tables-%s.tar.gz' % ( SF_MIRROR, SCIM_TABLES_VER )
+    url = sfurlbase + 'scim/scim-tables-%s.tar.gz' % SCIM_TABLES_VER
     tbe_dest = 'scim-tables-%s.tar.gz' % SCIM_TABLES_VER
-    download( url, tbe_dest )
-    
+    download(url, tbe_dest)
+
     # Get scim-pinyin-$(SCIM_PINYIN_VER).tar.gz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/scim/scim-pinyin-%s.tar.gz' % ( SF_MIRROR, SCIM_PINYIN_VER )
+    url = sfurlbase + 'scim/scim-pinyin-%s.tar.gz' % SCIM_PINYIN_VER
     pyn_dest = 'scim-pinyin-%s.tar.gz' % SCIM_PINYIN_VER
-    download( url, pyn_dest )
-    
+    download(url, pyn_dest)
+
     # Get libtabe-$(LIBTABE_VER).tgz:
-    url  = 'http://%s.dl.sourceforge.net/sourceforge/libtabe/libtabe-%s.tgz' % ( SF_MIRROR, LIBTABE_VER )
+    url = sfurlbase + 'libtabe/libtabe-%s.tgz' % LIBTABE_VER
     lbt_dest = 'libtabe-%s.tgz' % LIBTABE_VER
-    download( url, lbt_dest )
-    
+    download(url, lbt_dest)
+
     # Unihan.txt
-    ( t2s_1tomany, s2t_1tomany ) = unihanParser( han_dest )
+    (t2s_1tomany, s2t_1tomany) = unihanParser(han_dest)
+
+    t2s_1tomany.update(charManualTable('symme_supp.manual'))
+    t2s_1tomany.update(charManualTable('trad2simp.manual'))
+    s2t_1tomany.update((t[0], [f]) for (f, t) in charManualTable('symme_supp.manual'))
+    s2t_1tomany.update(charManualTable('simp2trad.manual'))
 
-    t2s_1tomany.update( charManualTable( 'symme_supp.manual' ) )
-    t2s_1tomany.update( charManualTable( 'trad2simp.manual' ) )
-    s2t_1tomany.update( ( t[0], [f] ) for ( f, t ) in charManualTable( 'symme_supp.manual' ) )
-    s2t_1tomany.update( charManualTable( 'simp2trad.manual' ) )
-    
     if pyversion[:1] in ['2']:
-      t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.iteritems()] )
-      s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.iteritems()] )
+        t2s_1to1 = dict([(f, t[0]) for (f, t) in t2s_1tomany.iteritems()])
+        s2t_1to1 = dict([(f, t[0]) for (f, t) in s2t_1tomany.iteritems()])
     else:
-      t2s_1to1 = dict( [( f, t[0] ) for ( f, t ) in t2s_1tomany.items()] )
-      s2t_1to1 = dict( [( f, t[0] ) for ( f, t ) in s2t_1tomany.items()] )
-    
-    s_tomany = toManyRules( t2s_1tomany )
-    t_tomany = toManyRules( s2t_1tomany )
+        t2s_1to1 = dict([(f, t[0]) for (f, t) in t2s_1tomany.items()])
+        s2t_1to1 = dict([(f, t[0]) for (f, t) in s2t_1tomany.items()])
+
+    s_tomany = toManyRules(t2s_1tomany)
+    t_tomany = toManyRules(s2t_1tomany)
 
     # noconvert rules
-    t2s_1to1 = removeRules( 'trad2simp_noconvert.manual', t2s_1to1 )
-    s2t_1to1 = removeRules( 'simp2trad_noconvert.manual', s2t_1to1 )
-    
+    t2s_1to1 = removeRules('trad2simp_noconvert.manual', t2s_1to1)
+    s2t_1to1 = removeRules('simp2trad_noconvert.manual', s2t_1to1)
+
     # the supper set for word to word conversion
     t2s_1to1_supp = t2s_1to1.copy()
     s2t_1to1_supp = s2t_1to1.copy()
-    t2s_1to1_supp.update( customRules( 'trad2simp_supp_set.manual' ) )
-    s2t_1to1_supp.update( customRules( 'simp2trad_supp_set.manual' ) )
-    
+    t2s_1to1_supp.update(customRules('trad2simp_supp_set.manual'))
+    s2t_1to1_supp.update(customRules('simp2trad_supp_set.manual'))
+
     # word to word manual rules
-    t2s_word2word_manual = manualWordsTable( 'simpphrases.manual', s2t_1to1_supp, t2s_1to1_supp )
-    t2s_word2word_manual.update( customRules( 'toSimp.manual' ) )
-    s2t_word2word_manual = manualWordsTable( 'tradphrases.manual', t2s_1to1_supp, s2t_1to1_supp )
-    s2t_word2word_manual.update( customRules( 'toTrad.manual' ) )
+    t2s_word2word_manual = manualWordsTable('simpphrases.manual',
+                                            s2t_1to1_supp, t2s_1to1_supp)
+    t2s_word2word_manual.update(customRules('toSimp.manual'))
+    s2t_word2word_manual = manualWordsTable('tradphrases.manual',
+                                            t2s_1to1_supp, s2t_1to1_supp)
+    s2t_word2word_manual.update(customRules('toTrad.manual'))
 
     # word to word rules from input methods
     t_wordlist = set()
     s_wordlist = set()
-    t_wordlist.update( ezbigParser( tbe_dest ),
-                       tsiParser( lbt_dest ) )
-    s_wordlist.update( wubiParser( tbe_dest ),
-                       zrmParser( tbe_dest ),
-                       phraseParser( pyn_dest ) )
+    t_wordlist.update(ezbigParser(tbe_dest),
+                      tsiParser(lbt_dest))
+    s_wordlist.update(wubiParser(tbe_dest),
+                      zrmParser(tbe_dest),
+                      phraseParser(pyn_dest))
 
     # exclude
-    s_wordlist = applyExcludes( s_wordlist, 'simpphrases_exclude.manual' )
-    t_wordlist = applyExcludes( t_wordlist, 'tradphrases_exclude.manual' )
+    s_wordlist = applyExcludes(s_wordlist, 'simpphrases_exclude.manual')
+    t_wordlist = applyExcludes(t_wordlist, 'tradphrases_exclude.manual')
 
     s2t_supp = s2t_1to1_supp.copy()
-    s2t_supp.update( s2t_word2word_manual )
+    s2t_supp.update(s2t_word2word_manual)
     t2s_supp = t2s_1to1_supp.copy()
-    t2s_supp.update( t2s_word2word_manual )
+    t2s_supp.update(t2s_word2word_manual)
 
     # parse list to dict
-    t2s_word2word = defaultWordsTable( s_wordlist, s_tomany, s2t_1to1_supp, t2s_supp )
-    t2s_word2word.update( t2s_word2word_manual )
-    s2t_word2word = defaultWordsTable( t_wordlist, t_tomany, t2s_1to1_supp, s2t_supp )
-    s2t_word2word.update( s2t_word2word_manual )
-    
+    t2s_word2word = defaultWordsTable(s_wordlist, s_tomany,
+                                      s2t_1to1_supp, t2s_supp)
+    t2s_word2word.update(t2s_word2word_manual)
+    s2t_word2word = defaultWordsTable(t_wordlist, t_tomany,
+                                      t2s_1to1_supp, s2t_supp)
+    s2t_word2word.update(s2t_word2word_manual)
+
     # Final tables
     # sorted list toHans
     if pyversion[:1] in ['2']:
-        t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.iteritems() if f != t] )
+        t2s_1to1 = dict([(f, t) for (f, t) in t2s_1to1.iteritems() if f != t])
     else:
-        t2s_1to1 = dict( [( f, t ) for ( f, t ) in t2s_1to1.items() if f != t] )
-    toHans = dictToSortedList( t2s_1to1, 0 ) + dictToSortedList( t2s_word2word, 1 )
+        t2s_1to1 = dict([(f, t) for (f, t) in t2s_1to1.items() if f != t])
+    toHans = dictToSortedList(t2s_1to1, 0) + dictToSortedList(t2s_word2word, 1)
     # sorted list toHant
     if pyversion[:1] in ['2']:
-        s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.iteritems() if f != t] )
+        s2t_1to1 = dict([(f, t) for (f, t) in s2t_1to1.iteritems() if f != t])
     else:
-        s2t_1to1 = dict( [( f, t ) for ( f, t ) in s2t_1to1.items() if f != t] )
-    toHant = dictToSortedList( s2t_1to1, 0 ) + dictToSortedList( s2t_word2word, 1 )
+        s2t_1to1 = dict([(f, t) for (f, t) in s2t_1to1.items() if f != t])
+    toHant = dictToSortedList(s2t_1to1, 0) + dictToSortedList(s2t_word2word, 1)
     # sorted list toCN
-    toCN = dictToSortedList( customRules( 'toCN.manual' ), 1 )
+    toCN = dictToSortedList(customRules('toCN.manual'), 1)
     # sorted list toHK
-    toHK = dictToSortedList( customRules( 'toHK.manual' ), 1 )
+    toHK = dictToSortedList(customRules('toHK.manual'), 1)
     # sorted list toTW
-    toTW = dictToSortedList( customRules( 'toTW.manual' ), 1 )
-    
+    toTW = dictToSortedList(customRules('toTW.manual'), 1)
+
     # Get PHP Array
     php = '''<?php
 /**
@@ -387,25 +415,25 @@ def main():
  */
 
 $zh2Hant = array(\n'''
-    php += PHPArray( toHant ) \
-        +  '\n);\n\n$zh2Hans = array(\n' \
-        +  PHPArray( toHans ) \
-        +  '\n);\n\n$zh2TW = array(\n' \
-        +  PHPArray( toTW ) \
-        +  '\n);\n\n$zh2HK = array(\n' \
-        +  PHPArray( toHK ) \
-        +  '\n);\n\n$zh2CN = array(\n' \
-        +  PHPArray( toCN ) \
-        +  '\n);\n'
-    
+    php += PHPArray(toHant) \
+        + '\n);\n\n$zh2Hans = array(\n' \
+        + PHPArray(toHans) \
+        + '\n);\n\n$zh2TW = array(\n' \
+        + PHPArray(toTW) \
+        + '\n);\n\n$zh2HK = array(\n' \
+        + PHPArray(toHK) \
+        + '\n);\n\n$zh2CN = array(\n' \
+        + PHPArray(toCN) \
+        + '\n);\n'
+
     if pyversion[:1] in ['2']:
-        f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'wb', encoding = 'utf8' )
+        f = open(os.path.join('..', '..', '..', 'includes', 'ZhConversion.php'), 'wb', encoding='utf8')
     else:
-        f = open( os.path.join( '..', '..', '..', 'includes', 'ZhConversion.php' ), 'w', buffering = 4096, encoding = 'utf8' )
+        f = open(os.path.join('..', '..', '..', 'includes', 'ZhConversion.php'), 'w', buffering=4096, encoding='utf8')
     print ('Writing ZhConversion.php ... ')
-    f.write( php )
+    f.write(php)
     f.close()
-    
+
     # Remove temporary files
     print ('Deleting temporary files ... ')
     os.remove('EZ-Big.txt.in')
@@ -414,7 +442,7 @@ $zh2Hant = array(\n'''
     os.remove('Unihan_Variants.txt')
     os.remove('Wubi.txt.in')
     os.remove('Ziranma.txt.in')
-    
+
 
 if __name__ == '__main__':
     main()
index 088f677..184cba8 100644 (file)
@@ -179,22 +179,22 @@ class NamespaceConflictChecker extends Maintenance {
 
                foreach ( $spaces as $name => $ns ) {
                        if ( $ns != 0 ) {
-                               // Fix up link destinations for non-interwiki links only.
-                               //
-                               // For example if a page has [[Foo:Bar]] and then a Foo namespace
-                               // is introduced, pagelinks needs to be updated to have
-                               // page_namespace = NS_FOO.
-                               //
-                               // If instead an interwiki prefix was introduced called "Foo",
-                               // the link should instead be moved to the iwlinks table. If a new
-                               // language is introduced called "Foo", or if there is a pagelink
-                               // [[fr:Bar]] when interlanguage magic links are turned on, the
-                               // link would have to be moved to the langlinks table. Let's put
-                               // those cases in the too-hard basket for now. The consequences are
-                               // not especially severe.
-                               //
-                               // @fixme Handle interwiki links, and pagelinks to Category:, File:
-                               // which probably need reparsing.
+                               /* Fix up link destinations for non-interwiki links only.
+                                *
+                                * For example if a page has [[Foo:Bar]] and then a Foo namespace
+                                * is introduced, pagelinks needs to be updated to have
+                                * page_namespace = NS_FOO.
+                                *
+                                * If instead an interwiki prefix was introduced called "Foo",
+                                * the link should instead be moved to the iwlinks table. If a new
+                                * language is introduced called "Foo", or if there is a pagelink
+                                * [[fr:Bar]] when interlanguage magic links are turned on, the
+                                * link would have to be moved to the langlinks table. Let's put
+                                * those cases in the too-hard basket for now. The consequences are
+                                * not especially severe.
+                                * @fixme Handle interwiki links, and pagelinks to Category:, File:
+                                * which probably need reparsing.
+                                */
 
                                $this->checkLinkTable( 'pagelinks', 'pl', $ns, $name, $options );
                                $this->checkLinkTable( 'templatelinks', 'tl', $ns, $name, $options );
@@ -592,14 +592,15 @@ class NamespaceConflictChecker extends Maintenance {
 
                $this->db->delete( 'page', array( 'page_id' => $id ), __METHOD__ );
 
-               // Call LinksDeletionUpdate to delete outgoing links from the old title,
-               // and update category counts.
-               //
-               // Calling external code with a fake broken Title is a fairly dubious
-               // idea. It's necessary because it's quite a lot of code to duplicate,
-               // but that also makes it fragile since it would be easy for someone to
-               // accidentally introduce an assumption of title validity to the code we
-               // are calling.
+               /* Call LinksDeletionUpdate to delete outgoing links from the old title,
+                * and update category counts.
+                *
+                * Calling external code with a fake broken Title is a fairly dubious
+                * idea. It's necessary because it's quite a lot of code to duplicate,
+                * but that also makes it fragile since it would be easy for someone to
+                * accidentally introduce an assumption of title validity to the code we
+                * are calling.
+                */
                $update = new LinksDeletionUpdate( $wikiPage );
                $update->doUpdate();
                $this->db->commit( __METHOD__ );
index 120ccb6..f7907ad 100644 (file)
@@ -757,13 +757,14 @@ class CgzCopyTransaction {
                        return;
                }
 
-               // Check to see if the target text_ids have been moved already.
-               //
-               // We originally read from the slave, so this can happen when a single
-               // text_id is shared between multiple pages. It's rare, but possible
-               // if a delete/move/undelete cycle splits up a null edit.
-               //
-               // We do a locking read to prevent closer-run race conditions.
+               /* Check to see if the target text_ids have been moved already.
+                *
+                * We originally read from the slave, so this can happen when a single
+                * text_id is shared between multiple pages. It's rare, but possible
+                * if a delete/move/undelete cycle splits up a null edit.
+                *
+                * We do a locking read to prevent closer-run race conditions.
+                */
                $dbw = wfGetDB( DB_MASTER );
                $dbw->begin( __METHOD__ );
                $res = $dbw->select( 'blob_tracking',
index 99ba3b8..f4ffbd0 100644 (file)
@@ -105,7 +105,9 @@ class UserOptions {
                return true;
        }
 
-       // Dumb stuff to run a mode.
+       /**
+        * Dumb stuff to run a mode.
+        */
        public function run() {
                if ( !$this->mReady ) {
                        return false;
@@ -116,11 +118,9 @@ class UserOptions {
                return true;
        }
 
-       #
-       # Modes.
-       #
-
-       /** List default options and their value */
+       /**
+        * List default options and their value
+        */
        private function LISTER() {
                $def = User::getDefaultOptions();
                ksort( $def );
@@ -133,7 +133,9 @@ class UserOptions {
                }
        }
 
-       /** List options usage */
+       /**
+        * List options usage
+        */
        private function USAGER() {
                $ret = array();
                $defaultOptions = User::getDefaultOptions();
@@ -186,7 +188,9 @@ class UserOptions {
                }
        }
 
-       /** Change our users options */
+       /**
+        * Change our users options
+        */
        private function CHANGER() {
                $this->warn();
 
@@ -242,10 +246,6 @@ class UserOptions {
                return $ret;
        }
 
-       #
-       # Helper methods
-       #
-
        public static function showUsageAndExit() {
                print <<<USAGE
 
index 0b56972..0d6a76c 100644 (file)
@@ -44,16 +44,17 @@ print Xml::openElement( 'OpenSearchDescription',
                'xmlns' => 'http://a9.com/-/spec/opensearch/1.1/',
                'xmlns:moz' => 'http://www.mozilla.org/2006/browser/search/' ) );
 
-// The spec says the ShortName must be no longer than 16 characters,
-// but 16 is *realllly* short. In practice, browsers don't appear to care
-// when we give them a longer string, so we're no longer attempting to trim.
-//
-// Note: ShortName and the <link title=""> need to match; they are used as
-// a key for identifying if the search engine has been added already, *and*
-// as the display name presented to the end-user.
-//
-// Behavior seems about the same between Firefox and IE 7/8 here.
-// 'Description' doesn't appear to be used by either.
+/* The spec says the ShortName must be no longer than 16 characters,
+ * but 16 is *realllly* short. In practice, browsers don't appear to care
+ * when we give them a longer string, so we're no longer attempting to trim.
+ *
+ * Note: ShortName and the <link title=""> need to match; they are used as
+ * a key for identifying if the search engine has been added already, *and*
+ * as the display name presented to the end-user.
+ *
+ * Behavior seems about the same between Firefox and IE 7/8 here.
+ * 'Description' doesn't appear to be used by either.
+ */
 $fullName = wfMessage( 'opensearch-desc' )->inContentLanguage()->text();
 print Xml::element( 'ShortName', null, $fullName );
 print Xml::element( 'Description', null, $fullName );
index ccc7b42..376e582 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -1,9 +1,6 @@
 <?xml version="1.0"?>
 <ruleset name="MediaWiki">
-       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
-               <!-- Disable failing rules -->
-               <exclude name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment.EmptyComment"/>
-       </rule>
+       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki" />
        <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
                <properties>
                        <property name="ignoreList" type="array" value="bfNormalizeTitleStrReplace,bfNormalizeTitleStrTr,cdbShowHelp,codepointToUtf8,compare_point,cssfilter,escapeSingleString,findAuxFile,findFiles,getEscapedProfileUrl,getFileCommentFromSourceWiki,getFileUserFromSourceWiki,hexSequenceToUtf8,mccGetHelp,mccShowUsage,mimeTypeMatch,moveToExternal,NothingFunction,NothingFunctionData,resolveStub,resolveStubs,showUsage,splitFilename,utf8ToCodepoint,utf8ToHexSequence" />
index f8143fa..59f5592 100644 (file)
@@ -284,15 +284,11 @@ input#wpSummary {
 }
 
 /**
- * Convenience links to edit block, delete and protect reasons
- * and upload licenses
+ * Convenience links to edit delete and protect reasons
  */
-p.mw-ipb-conveniencelinks,
 p.mw-protect-editreasons,
 p.mw-filedelete-editreasons,
-p.mw-delete-editreasons,
-p.mw-revdel-editreasons,
-p.mw-upload-editlicenses {
+p.mw-delete-editreasons {
        font-size: 90%;
        text-align: right;
 }
@@ -318,7 +314,7 @@ p.mw-upload-editlicenses {
        border: 1px dashed #aaa;
 }
 
-.mw-history-revisionactions, #mw-fileduplicatesearch-icon {
+.mw-history-revisionactions {
        float: right;
 }
 
index 60544d3..7a15a76 100644 (file)
@@ -43,6 +43,12 @@ ul.mw-allpages-chunk li {
        font-style: italic;
 }
 
+/* Special:Block */
+p.mw-ipb-conveniencelinks {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:BlockList */
 table.mw-blocklist span.mw-usertoollinks,
 span.mw-blocklist-actions {
@@ -66,6 +72,11 @@ td#mw-emailuser-recipient {
        font-weight: bold;
 }
 
+/* Special:FileDuplicateSearch */
+#mw-fileduplicatesearch-icon {
+       float: right;
+}
+
 /* Special:ListGroupRights */
 table.mw-listgrouprights-table tr {
        vertical-align: top;
@@ -87,6 +98,12 @@ td#mw-prefixindex-nav-form {
        text-align: right;
 }
 
+/* Special:RevisionDelete */
+p.mw-revdel-editreasons {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:Specialpages */
 .mw-specialpagerestricted {
        font-weight: bold;
@@ -124,6 +141,12 @@ table.mw-userrights-groups * th {
        padding-right: 1.5em;
 }
 
+/* Special:Upload */
+p.mw-upload-editlicenses {
+       font-size: 90%;
+       text-align: right;
+}
+
 /* Special:Contributions */
 .mw-contributions-form select {
        vertical-align: middle;
index c37c723..0e2546f 100644 (file)
         * @param {OO.ui.OptionWidget} item Chosen item
         */
        mw.widgets.TitleSearchWidget.prototype.onTitleSearchResultsChoose = function ( item ) {
-               // TOOD: Pressing enter can incorrectly trigger 'choose' with null.
-               // Remove this check when oojs-ui 0.12.10 lands.
-               if ( item ) {
-                       this.getQuery().setValue( item.getData() );
-               }
+               this.getQuery().setValue( item.getData() );
        };
 
        /**
index c8877fd..5a7e62e 100644 (file)
                                label: mw.msg( 'upload-form-label-infoform-name' ),
                                align: 'top'
                        } ),
-                       new OO.ui.FieldLayout( this.categoriesWidget, {
-                               label: mw.msg( 'foreign-structured-upload-form-label-infoform-categories' ),
-                               align: 'top'
-                       } ),
                        new OO.ui.FieldLayout( this.descriptionWidget, {
                                label: mw.msg( 'upload-form-label-infoform-description' ),
                                align: 'top'
                        } ),
+                       new OO.ui.FieldLayout( this.categoriesWidget, {
+                               label: mw.msg( 'foreign-structured-upload-form-label-infoform-categories' ),
+                               align: 'top'
+                       } ),
                        new OO.ui.FieldLayout( this.dateWidget, {
                                label: mw.msg( 'foreign-structured-upload-form-label-infoform-date' ),
                                align: 'top'
index 12d698b..568bfd4 100644 (file)
                log: ( function () {
                        // Also update the restoration of methods in mediawiki.log.js
                        // when adding or removing methods here.
-                       var log = function () {};
+                       var log = function () {},
+                               console = window.console;
 
                        /**
                         * @class mw.log
                         *
                         * @param {...string} msg Messages to output to console
                         */
-                       log.warn = function () {
-                               var console = window.console;
-                               if ( console && console.warn && console.warn.apply ) {
-                                       console.warn.apply( console, arguments );
-                               }
-                       };
+                       log.warn = console && console.warn && Function.prototype.bind ?
+                               Function.prototype.bind.call( console.warn, console ) :
+                               $.noop;
 
                        /**
                         * Write a message the console's error channel.
                         * @since 1.26
                         * @param {Error|...string} msg Messages to output to console
                         */
-                       log.error = function () {
-                               var console = window.console;
-                               if ( console && console.error && console.error.apply ) {
-                                       console.error.apply( console, arguments );
-                               }
-                       };
+                       log.error = console && console.error && Function.prototype.bind ?
+                               Function.prototype.bind.call( console.error, console ) :
+                               $.noop;
 
                        /**
                         * Create a property in a host object that, when accessed, will produce
index f361ec8..eeb7bb3 100644 (file)
                        // on links from hiding a notification.
                        .on( 'click', 'a', function ( e ) {
                                e.stopPropagation();
-                       } )
-                       .hide();
+                       } );
 
                // Prepend the notification area to the content area and save it's object.
                mw.util.$content.prepend( $area );
                offset = $area.offset();
+               $area.hide();
 
                function updateAreaMode() {
                        var isFloating = $window.scrollTop() > offset.top;
index 90d40a5..8af1428 100644 (file)
@@ -181,7 +181,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $fileName = $this->getNewTempFile();
 
                // Converting the temporary /file/ to a /directory/
-               //
                // The following is not atomic, but at least we now have a single place,
                // where temporary directory creation is bundled and can be improved
                unlink( $fileName );
index e39e02f..913c82f 100644 (file)
@@ -583,7 +583,6 @@ class GlobalTest extends MediaWikiTestCase {
                        // if you hack it just right are kinda pathological,
                        // and unreliable cross-platform or on IE which means they're
                        // unlikely to appear on intranets.
-                       //
                        // Those will survive the algorithm but with results that
                        // are less consistent.
 
@@ -708,81 +707,27 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        public function testWfMemcKey() {
-               // Just assert the exact output so we can catch unintentional changes to key
-               // construction, which would effectively invalidate all existing cache.
-
-               $this->setMwGlobals( array(
-                       'wgCachePrefix' => false,
-                       'wgDBname' => 'example',
-                       'wgDBprefix' => '',
-               ) );
-               $this->assertEquals(
-                       wfMemcKey( 'foo', '123', 'bar' ),
-                       'example:foo:123:bar'
-               );
-
-               $this->setMwGlobals( array(
-                       'wgCachePrefix' => false,
-                       'wgDBname' => 'example',
-                       'wgDBprefix' => 'mw_',
-               ) );
-               $this->assertEquals(
-                       wfMemcKey( 'foo', '123', 'bar' ),
-                       'example-mw_:foo:123:bar'
-               );
-
-               $this->setMwGlobals( array(
-                       'wgCachePrefix' => 'custom',
-                       'wgDBname' => 'example',
-                       'wgDBprefix' => 'mw_',
-               ) );
+               $cache = ObjectCache::getMainClusterInstance();
                $this->assertEquals(
-                       wfMemcKey( 'foo', '123', 'bar' ),
-                       'custom:foo:123:bar'
+                       $cache->makeKey( 'foo', 123, 'bar' ),
+                       wfMemcKey( 'foo', 123, 'bar' )
                );
        }
 
        public function testWfForeignMemcKey() {
-               $this->setMwGlobals( array(
-                       'wgCachePrefix' => false,
-                       'wgDBname' => 'example',
-                       'wgDBprefix' => '',
-               ) );
-               $local = wfMemcKey( 'foo', 'bar' );
-
-               $this->setMwGlobals( array(
-                       'wgDBname' => 'other',
-                       'wgDBprefix' => 'mw_',
-               ) );
+               $cache = ObjectCache::getMainClusterInstance();
+               $keyspace = $this->readAttribute( $cache, 'keyspace' );
                $this->assertEquals(
-                       wfForeignMemcKey( 'example', '', 'foo', 'bar' ),
-                       $local,
-                       'Match output of wfMemcKey from local wiki'
+                       wfForeignMemcKey( $keyspace, '', 'foo', 'bar' ),
+                       $cache->makeKey( 'foo', 'bar' )
                );
        }
 
        public function testWfGlobalCacheKey() {
-               $this->setMwGlobals( array(
-                       'wgCachePrefix' => 'ignored',
-                       'wgDBname' => 'example',
-                       'wgDBprefix' => ''
-               ) );
-               $one = wfGlobalCacheKey( 'some', 'thing' );
-               $this->assertEquals(
-                       $one,
-                       'global:some:thing'
-               );
-
-               $this->setMwGlobals( array(
-                       'wgDBname' => 'other',
-                       'wgDBprefix' => 'mw_'
-               ) );
-               $two = wfGlobalCacheKey( 'some', 'thing' );
-
+               $cache = ObjectCache::getMainClusterInstance();
                $this->assertEquals(
-                       $one,
-                       $two,
-                       'Not fragmented by wiki id'
+                       $cache->makeGlobalKey( 'foo', 123, 'bar' ),
+                       wfGlobalCacheKey( 'foo', 123, 'bar' )
                );
        }
 
index bb2b33f..8a7bfa5 100644 (file)
@@ -6,7 +6,7 @@
  */
 class WfGetCallerTest extends MediaWikiTestCase {
        public function testZero() {
-               $this->assertEquals( __METHOD__, wfGetCaller( 1 ) );
+               $this->assertEquals( 'WfGetCallerTest->testZero', wfGetCaller( 1 ) );
        }
 
        function callerOne() {
@@ -14,10 +14,10 @@ class WfGetCallerTest extends MediaWikiTestCase {
        }
 
        public function testOne() {
-               $this->assertEquals( 'WfGetCallerTest::testOne', self::callerOne() );
+               $this->assertEquals( 'WfGetCallerTest->testOne', self::callerOne() );
        }
 
-       function intermediateFunction( $level = 2, $n = 0 ) {
+       static function intermediateFunction( $level = 2, $n = 0 ) {
                if ( $n > 0 ) {
                        return self::intermediateFunction( $level, $n - 1 );
                }
@@ -26,11 +26,11 @@ class WfGetCallerTest extends MediaWikiTestCase {
        }
 
        public function testTwo() {
-               $this->assertEquals( 'WfGetCallerTest::testTwo', self::intermediateFunction() );
+               $this->assertEquals( 'WfGetCallerTest->testTwo', self::intermediateFunction() );
        }
 
        public function testN() {
-               $this->assertEquals( 'WfGetCallerTest::testN', self::intermediateFunction( 2, 0 ) );
+               $this->assertEquals( 'WfGetCallerTest->testN', self::intermediateFunction( 2, 0 ) );
                $this->assertEquals(
                        'WfGetCallerTest::intermediateFunction',
                        self::intermediateFunction( 1, 0 )
index f011f47..9093564 100644 (file)
@@ -125,21 +125,16 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'gopher://*.test.com/', 'gopher://gopher.test.com/0/v2/vstat' ),
                        array( 'telnet://', '*.test.com', 'telnet://shell.test.com/~home/' ),
 
-                       //
                        // The following only work in PHP >= 5.3.7, due to a bug in parse_url which eats
                        // the path from the url (https://bugs.php.net/bug.php?id=54180)
-                       //
                        // array( '', 'http://test.com', 'http://test.com/index?arg=1' ),
                        // array( 'http://', '*.test.com', 'http://www.test.com/index?arg=1' ),
                        // array( '' ,
                        //    'http://xx23124:__ffdfdef__@www.test.com:12345/dir' ,
                        //    'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
                        // ),
-                       //
 
-                       //
                        // Tests for false positives
-                       //
                        array( 'http://', 'test.com', 'http://www.test.com', false ),
                        array( 'http://', 'www1.test.com', 'http://www.test.com', false ),
                        array( 'http://', '*.test.com', 'http://www.test.t.com', false ),
@@ -166,10 +161,8 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        array( '', 'http://test.com:8080/dir/', 'http://test.com:808/dir/', false ),
                        array( '', 'http://test.com/dir/index.html', 'http://test.com/dir/index.php', false ),
 
-                       //
                        // These are false positives too and ideally shouldn't match, but that
                        // would require using regexes and RLIKE instead of LIKE
-                       //
                        // array( null, 'http://*.test.com', 'http://www.test.com:80', false ),
                        // array( '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
                        //      'https://gerrit.wikimedia.org/XXX/r/#/q/status:open,n,z', false ),
index 7280a97..3497c88 100644 (file)
@@ -29,7 +29,7 @@ class MWDebugTest extends MediaWikiTestCase {
                        array( array(
                                'msg' => 'logging a string',
                                'type' => 'log',
-                               'caller' => __METHOD__,
+                               'caller' => 'MWDebugTest->testAddLog',
                        ) ),
                        MWDebug::getLog()
                );
index b9fe490..466b9f5 100644 (file)
@@ -23,6 +23,35 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->cache->delete( wfMemcKey( 'test' ) );
        }
 
+       /**
+        * @covers BagOStuff::makeGlobalKey
+        * @covers BagOStuff::makeKeyInternal
+        */
+       public function testMakeKey() {
+               $cache = ObjectCache::newFromId( 'hash' );
+
+               $localKey = $cache->makeKey( 'first', 'second', 'third' );
+               $globalKey = $cache->makeGlobalKey( 'first', 'second', 'third' );
+
+               $this->assertStringMatchesFormat(
+                       '%Sfirst%Ssecond%Sthird%S',
+                       $localKey,
+                       'Local key interpolates parameters'
+               );
+
+               $this->assertStringMatchesFormat(
+                       'global%Sfirst%Ssecond%Sthird%S',
+                       $globalKey,
+                       'Global key interpolates parameters and contains global prefix'
+               );
+
+               $this->assertNotEquals(
+                       $localKey,
+                       $globalKey,
+                       'Local key and global key with same parameters should not be equal'
+               );
+       }
+
        /**
         * @covers BagOStuff::merge
         * @covers BagOStuff::mergeViaLock
index 8c76397..c846c06 100644 (file)
@@ -102,7 +102,7 @@ abstract class DumpTestCase extends MediaWikiLangTestCase {
                // expectOutput[...] functions. However, the PHPUnit shipped prediactes
                // do not allow to check /each/ line of the output using /readable/ REs.
                // So we ...
-               //
+
                // 1. ... add a dummy output checking to make PHPUnit not complain
                //    about unchecked test output
                $this->expectOutputRegex( '//' );
index 454e9c1..5c6a6cd 100644 (file)
@@ -4,7 +4,6 @@
 // instead of the MaintenanceFixup hack below. However, we cannot do
 // without changing the visibility and without working around hacks in
 // Maintenance.php
-//
 // For the same reason, we cannot just use FakeMaintenance.
 
 /**
index c216864..f5dd98b 100644 (file)
@@ -301,7 +301,6 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
 
                // The dump (hopefully) did take long enough to produce more than one
                // checkpoint file.
-               //
                // We now check all the checkpoint files for validity.
 
                $files = scandir( $nameOutputDir );
index 0cb0cdb..8b6221b 100644 (file)
@@ -288,17 +288,18 @@ class BackupDumperPageTest extends DumpTestCase {
                $this->assertDumpEnd();
        }
 
+       /**
+        * xmldumps-backup typically performs a single dump that that writes
+        * out three files
+        * - gzipped stubs of everything (meta-history)
+        * - gzipped stubs of latest revisions of all pages (meta-current)
+        * - gzipped stubs of latest revisions of all pages of namespage 0
+        *   (articles)
+        *
+        * We reproduce such a setup with our mini fixture, although we omit
+        * chunks, and all the other gimmicks of xmldumps-backup.
+        */
        function testXmlDumpsBackupUseCase() {
-               // xmldumps-backup typically performs a single dump that that writes
-               // out three files
-               // * gzipped stubs of everything (meta-history)
-               // * gzipped stubs of latest revisions of all pages (meta-current)
-               // * gzipped stubs of latest revisions of all pages of namespage 0
-               //   (articles)
-               //
-               // We reproduce such a setup with our mini fixture, although we omit
-               // chunks, and all the other gimmicks of xmldumps-backup.
-               //
                $this->checkHasGzip();
 
                $fnameMetaHistory = $this->getNewTempFile();